import java.util.Arrays;
public class Test {
public static void main(String ... args) {
fun(); // 输出:change param method:[],编译后:fun(new int[0]);
fun(1); // 输出:change param method:[1],编译后:fun(new int[] { 1 });
fun(1, 2); // 输出:two param method:1,2,编译后:fun(1, 2);
fun(1, 2, 3); // 输出:change param method:[1, 2, 3],编译后:fun(new int[] { 1, 2, 3 });
/* 结论:
优先级:固定个数参数 > 可变参数
可变参数调用处在编译时参数会被编译为数组
*/
fun(1, new int[]{2, 3}); // 输出:array param method:1,[2, 3],编译后: fun(1, new int[] { 2, 3 });
fun("11", new int[]{2, 3}); // 输出:array2 param method:11,[2, 3],编译后: fun(11, new int[] { 2, 3 });
// fun("11", 2, 3, 4); // 编译报错
/* 结论:
数组参数不可传递 类似 2,3,4 的参数(编译报错)
*/
fun2(); // 输出:fun2:[],0
// 可变参数在不传值时不会为null,而是空数组
// 可变参数兼容数组参数的特性(可变参数调用处在编译时参数会被编译为数组或调用出直接传数组),且接收后的参数为数组类型
}
public static void fun(int i, int j) {
System.out.println("two param method:" + i + "," + j);
}
public static void fun(int i, int[] intArray) {
System.out.println("array param method:" + i + "," + Arrays.toString(intArray));
}
public static void fun(String s, int[] intArray) {
System.out.println("array2 param method:" + s + "," + Arrays.toString(intArray));
}
// public static void fun(int[] intArray) {} // 报错,不能和可变参数共存
public static void fun(int... intArray) {
System.out.println("variable param method:" + Arrays.toString(intArray));
// for(int i : intArray) {
// System.out.println(i);
// }
System.out.println("is array:" + (intArray instanceof int[]));
}
public static void fun2(int... arr) {
System.out.println("fun2:" + Arrays.toString(arr) + "," + arr.length);
}
}