先讲可变参数。
上代码:
public class Test {
public static void main(String[] args) {
cc();
}
public static void cc(int... a) { // 形参可变的数组
System.out.println(a.length);
for (int i : a) {
System.out.println(i);
}
}
}
运行结果:0
批注:形参个数可变的参数本质就是一个数组参数。但是和数组参数又有不同。
第一种:public static void cc(int... a)大致等于
第二种:public static void cc(int[] a)
不同点在哪里?
如果形参是数组类型int[] a,那么必须传入参数,不能cc(),否则编译错误。
但是用int... a,这个参数可以不填,切记!不传入参数时数组a不是null,数组a是一个长度为0的int数组。除非显式传入null参数。
形参是数组类型int[] a,必须要传入标准的数组形式的参数,比如
定义方法:public static void cc(int[] a) {...}
那么传入的时候cc(new int[]{ 1, 67, 32, 8, 9 });
定义方法:public static void cc(int... a) {...}
那么传入的时候可以cc(1, 5, 8);
表示数组a有3个元素,分别为1,5,8
也可以传入cc();数组a长度为0
eg:
public class Test {
public static void main(String[] args) {
cc(1, 3, 5);
System.out.println();
dd(new int[] { 2, 4, 6 });
}
public static void cc(int... a) { // 形参可变的数组
for (int i : a) {
System.out.print(i);
}
}
public static void dd(int[] a) { // 形参可变的数组
for (int i : a) {
System.out.print(i);
}
}
}
运行结果:
135
246
接下来讲foreach循环问题
public class Test {
public static void main(String[] args) {
cc();
dd(null);
}
public static void cc(int... a) { // 形参可变的数组
System.out.println(a.length);
for (int i : a) {
System.out.println(i);
}
}
public static void dd(int... a) { // 形参可变的数组
for (int i : a) {
System.out.println(i);
}
}
}
运行结果:
可以看到,不传入参数,数组a是一个长度为0的数组,foreach循环条件不满足,所以不打印
显式传入null,foreach循环会报空指针异常。所以使用foreach循环的时候一定要考虑集合或者数组的引用是否为null,以免发生空指针异常。
同理,形参为数组类型传入null,进入foreach也会报空指针异常
public class Test {
public static void main(String[] args) {
cc(null);
}
public static void cc(int[] a) { // 形参可变的数组
for (int i : a) {
System.out.print(i);
}
}
}
结果:
=================================Talk is cheap, show me the code===============================