为什么整数的自动装箱和拆箱不能与Java中的Arrays.asList一起使用?

bra*_*orm 4 java arrays autoboxing copy list

以下是抛出compile error:

int[] arrs = {1,2,4,3,5,6};
List<Integer> arry = Arrays.asList(arrs);
Run Code Online (Sandbox Code Playgroud)

但这有效:

for (Integer i : arrs){
   //do something
}
Run Code Online (Sandbox Code Playgroud)

自动拳击在许多情况下都有效,我刚才给出了一个例子for-loop.但是List-view我做的却失败了Arrays.asList().

为什么这会失败?为什么选择设计实现?

Psh*_*emo 6

为了使事情有效,你需要使用Integer[]而不是int[].

的参数asList的类型是T...和通用类型T不能代表原始类型int,所以它会代表最具体的对象的类,它在这种情况下是阵列型int[].
这就是为什么Arrays.asList(arrs);会尝试返回List<int[]>而不是List<int>甚至List<Integer>.

有些人希望自动转换int[]Integer[],但也要忘记自动装箱仅适用于基本类型,但数组不是基本类型.