为什么在Java中,整数的自动装箱和取消装箱不适用于Arrays.asList?

为什么在Java中,整数的自动装箱和取消装箱不适用于Arrays.asList?,java,arrays,list,copy,autoboxing,Java,Arrays,List,Copy,Autoboxing,下面是编译错误的提示: int[] arrs = {1,2,4,3,5,6}; List<Integer> arry = Arrays.asList(arrs); 自动装箱在很多情况下都可以工作,我只是在上面给出了一个循环的for示例。但是它在我在Arrays.asList()中创建的列表视图中失败 为什么会失败,为什么会选择设计实现?要使事情正常进行,您需要使用Integer[]而不是int[] asList的参数是类型T..和泛型类型T不能表示基元类型int,因此它将表示最特定

下面是编译错误的提示:

int[] arrs = {1,2,4,3,5,6};
List<Integer> arry = Arrays.asList(arrs);
自动装箱在很多情况下都可以工作,我只是在上面给出了一个循环的
for
示例。但是它在我在
Arrays.asList()
中创建的
列表视图中失败


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

要使事情正常进行,您需要使用
Integer[]
而不是
int[]

asList
的参数是类型
T..
和泛型类型
T
不能表示基元类型
int
,因此它将表示最特定的对象类,在本例中是数组类型
int[]

这就是为什么
Arrays.asList(arrs)
将尝试返回
List
,而不是
List
甚至
List


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

数组。asList
以泛型
T[]
为参数。此
T
始终是一个对象,而不是基本体。当您将
int[]
作为参数(不是对象数组而是基本体)时,它会认为参数实际上是vararg的第一个元素。因此,结果列表将具有指纹
列表

如果您想了解有关数组中泛型的更多信息,请阅读本页: (部分:数组)

Arrays.asList()
接受给定类型的任意数量的参数
T
#asList(T..T)
)。调用
Arrays.asList(arrs)
您真正要做的是传递
int[]类型的单个元素
,因此出现了问题。 它应该是:

int[]arrs={1,2,4,3,5,6}
List arry=Arrays.asList(arrs)


List arry=Arrays.asList(1,2,3,4,5,6)

因为
int[]
Integer[]
没有自动装箱,而且该方法需要
T[]
。呵呵,编辑得不错,现在的答案是一样的:)
for (Integer i : arrs){
   //do something
}