一.什么是可变长度参数
Java SE 1.5中提供了varargus机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。这种机制适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
二.使用方式
1.定义带有可变长度参数的函数
只要在一个形参的“类型”与“参数名”之间加上三个连续的“.”即可。
public static void testVarargus(int...a) { for (int i:a) { System.out.println(i); } }
2.调用方法
(1)传入多个参数
testVarargus(1,2,3,4,5);
(2)传入数组
(3)传入空参数是合法的int a[]={1,2,3,4,5}; testVarargus(a);
testVarargus();
三.注意1.可变长度的形参必须放在参数表的最后,也就是说,仅可以有一个可变长度参数。
public static void testVarargus(int b,int c,int...a) { for (int i:a) { System.out.println(i); } }
2.varargus与数组参数,在重载时会发生冲突。(调用包含可变长度参数的函数时,编译器为可变参数隐含创建一个数组。)
public static void testVarargus(int...a) //编译器报错 { for (int i:a) { System.out.println(i); } } public static void testVarargus(int [] b) { for (int i:b) { System.out.println(i); } }
四.重载匹配原则
1.参数个数固定的函数优先
发生重载时,当可变参数的函数与固定参数的函数都可以匹配的情况下,固定参数的函数优先。
public static void testVarargus(int...a) { System.out.println("this is varargus func"); }
public static void testVarargus(int a,int b) //优先调用该函数 { System.out.println("this is fixed func"); }
2.匹配歧义两个包含可变参数的函数发生重载时,若都可以匹配,则发生歧义,编译器报错。public static void testVarargus(int...a) //若调用testVarargus(1,2)则发生歧义 { System.out.println("this is varargus func"); } public static void testVarargus(int a,int... b) { System.out.println("this is fixed func"); }