为什么在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
}