Java 为什么在这种情况下不会发生自动装箱?
我想知道为什么在以下情况下不会发生自动装箱:Java 为什么在这种情况下不会发生自动装箱?,java,arrays,list,autoboxing,Java,Arrays,List,Autoboxing,我想知道为什么在以下情况下不会发生自动装箱: 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); int[]数组=新的int[]{1,3,6,2,-1,6};//如果它是整数而不是int,那么它就可以工作了。 List liston=Arrays.
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);
int[]数组=新的int[]{1,3,6,2,-1,6};//如果它是整数而不是int,那么它就可以工作了。
List liston=Arrays.asList(array);
有没有什么特别的原因使它不能自动装箱
提前感谢。您可以在自动装箱上阅读: 自动装箱是Java编译器进行的自动转换 在基元类型及其相应的对象包装器之间 上课。例如,将int转换为整数,将double转换为 双倍,等等。如果转换方向相反,则这是 叫做拆箱 正如您在最后所读到的,自动装箱的类型有:boolean、byte、char、float、int、long和short阵列未自动装箱
编译器将这样做对您来说似乎非常合乎逻辑,但这种行为非常复杂,需要非常复杂的编译器。为什么这里需要自动装箱
的参数是varargsArray.asList
,可以解释为T..
T[]
- 泛型需要对象类型
Integer[]
,则T[]
中的T
将被理解为Integer
so Array.asList将返回List
但如果您传递数组(并且所有数组也是对象类型),则
T
可以(并且将)是int[]
生成数组的结果。asListList
演示
int[]数组=新的int[]{1,3,6,2,-1,6};
// |
// +-----------------------+
List liston=Arrays.asList(array);//|
System.out.println(liston.get(0)[1])//将打印3
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