我想知道为什么以下不会发生自动装箱:
int [] array = new int[]{1,3,6,2,-1,6};// if it had been Integer instead of int, would have worked.
List<Integer> liston = Arrays.asList(array);
为什么它不会自动进行自动装箱有什么特别的原因?
提前致谢。
答案 0 :(得分:3)
您可以阅读自动装箱here:
Autoboxing是Java编译器自动转换 原始类型与其对应的对象包装器之间 类。例如,将int转换为Integer,将double转换为a 双,等等。如果转换是另一种方式,那就是 称为拆箱。
正如你可以在最后看到的那样,自动装箱的类型是:boolean,byte,char,float,int,long和short。 数组未自动装箱
编译器会这样做似乎很合乎逻辑,但这种行为非常复杂,需要一个非常复杂的编译器。
答案 1 :(得分:0)
为什么这里需要自动装箱?
Array.asList
的参数是varargs T...
,可以解释为T[]
如果您通过Integer[]
,则T
中的T[]
将被理解为Integer
,因此Array.asList将返回List<Integer>
。
但是如果传递数组(并且所有数组也是对象类型),则T
可以(并且将)int[]
生成Array.asList List<int[]>
的结果。
演示。
int[] array = new int[]{1,3,6,2,-1,6};
// |
// +-----------------------+
List<int[]> liston = Arrays.asList(array);// |
System.out.println(liston.get(0)[1]);//will print 3