Java Arrays.asList返回类型不匹配
为什么下面的语句不返回整数列表Java Arrays.asList返回类型不匹配,java,collections,Java,Collections,为什么下面的语句不返回整数列表 int[] ints = new int[] { 1, 2, 3, 4, 5 }; List<Integer> intsList = Arrays.asList(ints); //compilation error 返回字符串的列表。我猜它失败是因为它是一个基元数组,但为什么呢?实际上,我如何返回int的列表呢?这是因为数组。asList(新的int[]{1,2,3,4,5})将创建一个包含一项的列表,而不是包含五项的列表 但是请注意,这将实现您的预
int[] ints = new int[] { 1, 2, 3, 4, 5 };
List<Integer> intsList = Arrays.asList(ints); //compilation error
返回
字符串的列表。我猜它失败是因为它是一个基元数组,但为什么呢?实际上,我如何返回int
的列表呢?这是因为数组。asList(新的int[]{1,2,3,4,5})
将创建一个包含一项的列表,而不是包含五项的列表
但是请注意,这将实现您的预期:
List<Integer> intsList = Arrays.asList(1, 2, 3, 4, 5);
List intsList=Arrays.asList(1,2,3,4,5);
你的其他选择是:
- 要首先创建一个
整数[]
,或
- 在循环中填充列表
该方法定义为:
公共静态列表asList(T…a)
因此,在第一种情况下,T
是int[]
,您将一个对象传递给该方法(即数组),因此它返回一个int[]
列表
我想你把误认为是asList(1,2,3,4,5)
(即5项)列表中的T
必须是java.lang.Object
的某个子类型,而int
不是。唯一的另一种解释是,当我们使用..
时,您提供的是int[]
数组,即int[][]
。所以你得到了列表
String
是Object
的一个子类型,因此它可以正常工作。这也是在J2SE5.0中引入varargs之前它可以工作的唯一方法。通常,现有代码的解释不应在不同语言版本之间改变
现在,如果您想要一个列表
,您可以遍历并框选每个整数。如果你的程序中有很多这样的元素,那么内存可能是个问题。您可能希望使用第三方库,该库使用int[]
紧凑地支持List
,或者只使用基本体的数组。不幸的是,Java不支持值类型。您只能在列表中拥有对象。这排除了int的列表。我希望它会自动装箱。但列表给了他一个编译错误。另一个问题的答案很好,这可能是关闭的,不知道要搜索的正确术语。Java不自动装箱数组,它只自动装箱单个原语。是的,我已经尝试过了,它确实可以用int[]大小为百万?@arynaq您的两个选项是创建一个Integer[]
而不是int[]
,或者在循环中填充列表。完全正确+我记得。在Java中,如果愿意,您可以使用类型为T的数组调用一个方法,该方法的参数是T类型的可变项数。这就是为什么签名很重要。Java中没有int
的列表。
List<Integer> intsList = Arrays.asList(1, 2, 3, 4, 5);