避开基本类型数组转换列表陷阱
先上一段代码:
import java.util.Arrays; import java.util.List; public class demo5 { public static void main(String[] args) { int[] i={1,23,25,41,93,11}; List list=Arrays.asList(i); System.out.println(list.size()); } }
你会觉得这个打印出来的结果是6,但事实上结果是1,这是为什么呢?我们先来看一段Arrays.asList()代码:
public static <T> List<T> asList(T... a){ return new ArrayList<T>(a); }
asList方法输入的是一个泛型变长参数,我们知道基本类型是不能泛型化的,也就是说8个基本类型都不能作为泛型参数,要想作为泛型参数,就必须使用包装类。而这个例子是一个整型的数组·,在java中,数组是一个对象,他是可以泛型化的,所以例子中是吧一个数组传给了泛型参数。所以转换后在List中就只有一个类型为int型的数组元素了。弄清了问题,我们这里就知道怎么修改了。通过把数组类型改为包装类就可以了。附代码:
import java.util.Arrays; import java.util.List; public class demo5 { public static void main(String[] args) { int[] i={1,23,25,41,93,11}; List list=Arrays.asList(i); Integer[] i2={1,23,25,41,93,11}; List list2=Arrays.asList(i2); System.out.println(list.size()); System.out.println(list2.size()); } }
结果:
注意:原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱。
世上无难事,只怕有心人