平常很少用到不定长参数,这次接触这个东西也是因为在数组转换列表时遇到的一个坑。
废话不多说,直接上代码:
public static void main(String[] arg0) {
/**
* 基本数据类型数组
*/
int[] intNum = {1,2,3,4};
/**
* 包装类类型数组
*/
Integer[] integerNum= new Integer[]{1, 2, 3, 4};
System.out.println("基本数据类型数组");
setArray(intNum);
System.out.println("包装类数据类型");
setArray(integerNum);
}
public static <T> void setArray(T... number) {
System.out.println("number长度"+number.length);
for(Object asd : number ){
System.out.println(asd);
}
}
输出结果:
不定长参数的本质是数组实现的,可以直接去传数组。上面的代码中就是直接传递的数组,结果的区别很明显。在传递基本数据类型数组时,整个数组直接被当作了一个整体,输出的也是数组的地址,参数
number
的长度为1,但是当参数是包装类类型数组时,就能正确的输出内容,并且参数number
的长度也为4。为了比较,也用了其他的基本类型和对象类型的数据进行测试,结果无一不和上面的结果一致。综上所述,可以很肯定的说:
不定长参数在使用数组传参时,一定要注意不能是基本类型数据的数组,只能是对象类型数据的数组,比如基本数据类型的包装类。
原因不知道,记录在此,权当提醒
网友评论