可变参数类型以及与数组的区别
验证一下,看看是不是这个可变参数就是数组类参数?
1 public class TestVarArgus {
2 public static void dealArray(int... intArray) {
3 for (int i : intArray)
4 System.out.print(i + " ");
5
6 System.out.println();
7 }
8
9 public static void dealArray(int[] intArray) {
10 // 会有Duplicate method dealArray(int[]) in type TestVarArgus的错误
11 for (int i : intArray)
12 System.out.print(i + " ");
13
14 System.out.println();
15 }
16
17 public static void main(String args[]) {
18 dealArray();
19 dealArray(1);
20 dealArray(1, 2, 3);
21 }
22 }
从上面这段代码可以看出,这两个方法是冲突的,是无法重载的。到这里,再来做一个有意思的实验:
1 public class TestVarArgus {
2 public static void dealArray(int... intArray) {
3 for (int i : intArray)
4 System.out.print(i + " ");
5
6 System.out.println();
7 }
8
9 public static void main(String args[]) {
10 int[] intArray = {
1, 2, 3 };
11
12 dealArray(intArray);// 通过编译,正常运行
13 }
14 }
1 public class TestVarArgus {
2 public static void dealArray(int[] intArray) {
3 for (int i : intArray)
4 System.out.print(i + " ");
5
6 System.out.println();
7 }
8
9 public static void main(String args[]) {
10 dealArray(1, 2, 3);// 编译错误
11 }
12 }
从上面这两段代码可以看出来,可变参数是兼容数组类参数的,
但是数组类参数却无法兼容可变参数。
其实对于第二段代码而言,编译器并不知道什么可变不可变,
在它看来,需要定义一个dealArray(int, int, int)类的方法。
所以,自然就无法去匹配数组类参数的dealArray方法了。