可变参数在方法中的具体格式:
修饰符 返回值类型 方法名(数据类型... 变量名){}
通过实例明确概念要点:
- (1) 定义方法时,不确定该定义多少个参数,用可变参数。可变参数个数取值范围为自然数。
public class ChangeableArgs{
public static void main(String[] args) {
dealArray();
dealArray(1);
dealArray(1, 2);
}
public static void dealArray(int... arr) {
for (int i : arr)
System.out.print(i + " ");
System.out.println();
}
}
输出:
1
1 2
- (2) 可变参数本质上是一个数组。
public class ChangeableArgs{
public static void main(String[] args) {
}
public static void dealArray(int... arr) {
}
public static void dealArray(int[] arr) { // 此处编译报错:“Duplicate method dealArray”,即“重复的方法定义”
}
}
- (3) 可变参数是兼容数组类参数的,但是数组类参数却无法兼容可变参数。
public class ChangeableArgs{
public static void main(String args[]){
int[] arr= {1, 2, 3};
dealArray(arr); // 通过编译,正常运行
}
public static void dealArray(int... arr){
for (int i : arr)
System.out.print(i +" ");
System.out.println();
}
}
而
public class ChangeableArgs{
public static void main(String args[]){
dealArray(1,2,3); // 编译错误
}
public static void dealArray(int[] arr){
for (int i : arr)
System.out.print(i +" ");
System.out.println();
}
}
- (4) 如果一个方法有可变参数,并且有多个参数,那么,可变参数必须是最后一个
public class ChangeableArgs {
public static void main(String args[]){
}
public static void dealArray(int count, int... arr){
}
public static void dealArray(int... arr, int count){//编译报错,可变参数类型应该作为参数列表的最后一项
}
}
- (5) 可变参数匹配优先级最低
public class ChangeableArgs {
public static void main(String args[]){
dealArray(1, 2); // 最终打印2
}
public static void dealArray(int... arr){
System.out.println("1");
}
public static void dealArray(int count1, int count2){
System.out.println("2");
}
}
参考文章
微wx笑的Java方法的可变参数个数