Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在这种情况下不会发生自动装箱?_Java_Arrays_List_Autoboxing - Fatal编程技术网

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阵列未自动装箱


编译器将这样做对您来说似乎非常合乎逻辑,但这种行为非常复杂,需要非常复杂的编译器。

为什么这里需要自动装箱

  • Array.asList
    的参数是varargs
    T..
    ,可以解释为
    T[]
  • 泛型需要对象类型
如果传递
Integer[]
,则
T[]
中的
T
将被理解为
Integer
so Array.asList将返回
List

但如果您传递数组(并且所有数组也是对象类型),则
T
可以(并且将)是
int[]
生成数组的结果。asList
List

演示

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