JDK1.5以后,Java支持定义形参个数可变的参数,从而为方法指定数量不确定的形参:
public static void function(int var1, int... var2) {
// TODO
}
我们知道,数组是变量的集合,这些变量有相同的类型,使用相同的名字,连续顺序存储,支持按索引访问。
连续的、同类型的一组变量集合,不就是数组吗?这个可变参数与数组有什么关系呢?
下面进行一个实验:
public class Varargs {
public static void function(int var1, int... var2) {
System.out.println(var1);
System.out.println(var2.getClass());
int[] array = new int[] {1, 2, 3, 4};
System.out.println(array.getClass());
}
public static void main(String[] args) {
function(100, 1, 2, 3, 4);
}
}
运行结果是:
100
class [I
class [I
可见,传入的可变个数参数本质是一个数组参数的“语法糖”!
以上面的function()
调用为例,如果传入四个可选参数1、2、3、4则调用语句是:function(100, 1, 2, 3, 4);
,否则如果可选参数改成数组则需要先定义一个int类型数组int[] var2 = new int[] {1, 2, 3, 4};
然后调用function(100, var2);
。