【发布时间】:2014-06-03 19:43:48
【问题描述】:
我对两个代码 sn-ps 感到困惑:
sn-p 1
List list = new ArrayList();
list.add("1");
Iterator<Integer> iterator = list.iterator();
System.out.println(iterator.next());
此代码正常执行并将1输出到控制台
sn-p 2
List list = new ArrayList();
list.add(1);
Iterator<String> iterator = list.iterator();
System.out.println(iterator.next());
它的结果 - RuntimeException
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
我很困惑,因为这两行都是错误的:
Integer integer = "123";
String string = 1;
这是编译错误。
为什么同类行为不同?
附言
我正在准备 scjp 考试,不要混合使用原始类型和泛型;
【问题讨论】:
-
类型擦除。您的第一个示例是原始类型。
-
@ElliottFrisch:与第二个示例相同。
-
@ElliottFrisch:没有什么能阻止它。盒装整数与任何其他对象一样具有 toString。
-
@Elliott Frisch 我不明白你
-
尝试在上面运行
javap。
标签: java generics casting type-conversion type-erasure