有两种方案 为什么第一个代码代码的工作?我希望它抛出一个运行时异常,在访问元素作为字符串添加的,而不是整数泛型在运行时
同样.. 第二码在访问元素时抛出运行时异常,虽然它能够在arrayList中尽可能舒适地添加Integer,尽管声明它是为了保持String。
在这两个代码,我们成功地将不同的数据类型,但似乎在访问元素
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
Test.addToList(arrayList);
System.out.println(arrayList.get(0));
}
public static void addToList(ArrayList arrayList) {
arrayList.add("i");
}
}
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
Test.addToList(arrayList);
System.out.println(arrayList.get(0));
}
public static void addToList(ArrayList arrayList) {
arrayList.add(1);
}
}
为什么允许'add'是因为函数定义 - 你定义的函数不知道'arrayList'期望(或应该允许)什么类型 - 至于运行时错误:'String'是一个类,所以ArrayList存储引用(有点类似地址) - 如果你试图访问内存位置1,它不包含有效的String对象,所以你得到运行时错误 – UnholySheep
你应该在运行第二个时得到一个'ClassCastException' 。 – NewUser
@UnholySheep但我不确定你的评论解释了为什么第一个也不会失败。 –