3

I would like to know why autoboxing does not occur in the following:

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);

Is there any particular reason why it does not autobox automatically?

Thanks in advance.

4

2 回答 2

3

你可以在这里阅读自动装箱:

自动装箱是 Java 编译器在原始类型与其对应的对象包装类之间进行的自动转换。例如,将 int 转换为 Integer,将 double 转换为 Double,等等。如果转换以另一种方式进行,则称为拆箱。

正如您在最后看到的那样,自动装箱的类型有:boolean、byte、char、float、int、long 和 short。数组未自动装箱

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

于 2013-09-08T09:36:55.517 回答
0

为什么这里需要自动装箱?

  • 的参数Array.asList是可变参数T...,可以解释为T[]
  • 泛型需要对象类型,

如果您通过Integer[]then TinT[]将被理解为IntegerArray.asList 将返回List<Integer>
但是,如果您传递数组(并且所有数组也是 Object 类型),那么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
于 2013-09-08T09:45:56.437 回答