1.JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。
方法的可变参数的声明如下所示:typeName... parameterName
在方法声明中,在指定参数类型后加一个省略号(...) 。
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
2.示例:public void show(int... a) {};
可变参数在方法中被当作数组来处理
3.可变参数传值的四种方式:
一个值也不传,可变参数会接收到长度为0的数组
传null,可变参数会接收到null
传数组,可变参数会接收到数组
传1个到多个数组元素值,可变参数会接收到数组
实例:
public class Test {
public void changeParam(int... a) {
System.out.println("数组长度为:" + a.length);
}
public static void main(String[] args) {
Test m1 = new Test();
//一个值都不传递
m1.changeParam();
//传数组对象
m1.changeParam(new int[]{5,7,9,1});
//传多个元素值,会当成数组处理
m1.changeParam(1,2,3,4,5);
//传null,但是这个参数不可用
m1.changeParam(null);
}
}
实例2:
public class VarargsDemo {
public static void main(String args[]) {
// 调用可变参数的方法
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{1, 2, 3});
}
public static void printMax( double... numbers) {
if (numbers.length == 0) {
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for (int i = 1; i < numbers.length; i++){
if (numbers[i] > result) {
result = numbers[i];
}
}
System.out.println("The max value is " + result);
}
}
//以上实例编译运行结果如下:
The max value is 56.5
The max value is 3.0
4.可变参数和数组作为方法参数时的区别:
从个数来看,可变参数只能有一个,数组可以有多个
从定义位置来看,可变参数只能定义在参数列表的末尾,数组可以在任何位置
从传参的形式来看,可变参数可以传数组、null、0个参数、一到多个参数,数组可以传数组引用、数组对象、null