为什么对 int[] 运行 Arrays.asList 返回的是 List<int[]> 而不是 List<int>?

3

考虑以下代码:

int[] tcc = {1,2,3};
ArrayList<Integer> tc = Arrays.asList(tcc);

针对以上代码,Java 报错说无法将 List<int[]> 转换为 ArrayList<Integer>

这是怎么回事呢?

为什么是 List<int[]> 而不是 List<int>

3个回答

3

ArrayList 只能容纳对象,而不能容纳像 int 这样的基本类型。由于 int != Integer,因此您无法在原始类型数组中执行您尝试执行的操作。这很简单明了。但是如果使用 Integer 数组,则可以实现该功能。


1
他还可以这样做:Arrays.asList(1, 2, 3); - NG.
1
它被称为自动装箱,与varargs语法结合使用...因此实际上您在这里创建了一个Integer数组。 - Paŭlo Ebermann

1

你可以这样写:

List<int[]> tc = Arrays.asList(tcc);

Arrays.asList 返回的是一个List,而不是 ArrayList。由于 Arrays.asList 是一个 varargs 函数,它认为 tcc 是一个更大数组中的一个元素。

如果你想要一个整数列表,你需要像 Hovercraft Of Eel 的答案评论中 SB 所提到的那样重新编写它:

List<Integer> tc = Arrays.asList(1, 2, 3);

或者,如果你将tcc定义为Integer[],你仍然可以在下面的代码片段中将其作为参数使用,只需显式地请求一个List类型的整数,并提供与传递的数组相符的类型参数:

 Integer[] tcc = {1,2,3};
 List<Integer> tc = Arrays.<Integer>asList(tcc);

那又怎样,如果你有一个int[]参数呢? - n611x007

1
这个会起作用:
ArrayList tc = new ArrayList(Arrays.asList(1,2,3));

也许我看错了什么,但我看不出重点在哪里。假设我得到一个int[]参数,我该怎么办? - n611x007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接