【发布时间】:2021-02-03 20:42:59
【问题描述】:
我想知道如何将原始整数数组转换为整数列表?
没有编译错误:
int[] nums = {0, 1};
List<Integer> list = new ArrayList(Arrays.asList(nums));
list.get(0);
但是这个:
int[] nums = {0, 1};
List<Integer> list = new ArrayList(Arrays.asList(nums));
int a = list.get(0);
失败:
java.lang.ClassCastException: class [I cannot be cast to class java.lang.Integer ([I and java.lang.Integer are in module java.base of loader 'bootstrap')
【问题讨论】:
-
int 和 Integer 不一样
-
请注意
new ArrayList(几乎自动成为一个错误;那是一个“raw type”,并告诉编译器忽略它对类型系统的了解。您应该改为写new ArrayList<>(。这样你会在编译时得到一个适当的错误,让你知道你的类型不匹配,而不是在运行时ClassCastException。 -
另外——你写的第一个例子“没有编译错误”,但实际上没有一个产生编译错误。
-
谢谢@ruakh!好点 :) 我 99% 同意你的观点。我可能是错的,但我认为当类型已经在
List <Integer>中定义时,在ArrayList<Ingeger>(中添加<Integer>是不必要的,ArrayList(很好(或者甚至更好)。如果我错了,请纠正我。 -
@NavidVafaei:从 OP 的示例中可以看出,编译器允许类似
List<Integer> list = new ArrayList(Arrays.asList("string"))的内容,即使它会在运行时引发异常。请注意,我不建议添加<Integer>;我仅建议添加<>,如List<Integer> list = new ArrayList<>(Arrays.asList("string"))。<>要求编译器推断类型,因此它不是原始类型,并且在编译时而不是运行时检测到问题。
标签: java arrays arraylist type-conversion converters