int a[] = {12,56,6,676,8};
List list = Arrays.asList(a);
System.out.println(list.size());
原因是,在Arrays.asList中,该方法接受一个变长参数,一般可看做数组参数,但是因为int[] 本身就是一个类型,所以data变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1。
http://blog.sina.com.cn/s/blog_6a6badc90101550l.html
Arrays.asList(a)这个方法只是建立的数组和集合的关系,但是底层的保存形式还是数组。看看源码就会知道:
@SafeVarargs
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
//----------------------------
private final E[] a;//这是arrayList的属性
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;//把数组传给arraList
}
从源码可以看出:list中其实存放的只不过是一个数组,所以长度自然数1呀。
第二种方法验证特别简单:就是给List加上泛型,随意添加一个除了Object类的泛型,然后eclipse就会自动纠错,最后结果就是
List<int[]> list = Arrays.asList(a);
这会特别明了的看清楚数据转成集和的本质。长度也就一目了然了。
你list里面存放的就是a数组啊,肯定size就是1啊