6

在这个例子中

public static void main(String[] args) {

    List<Integer> integers = new ArrayList<Integer>();
    integers.add(1);
    addToList(integers);
    System.out.println(integers);
}


public static void addToList(List list0){
    list0.add("blabl");
}

这将编译并打印结果

[1,胡说八道]

我的理解是:

引用变量“整数”具有传递给 addToList 方法的 arraylist 对象的地址(例如 111)。因此,在 addToList 方法中,list0 指向具有对象的相同地址(它是一个整数类型的数组列表),并且一个字符串被添加到这个数组列表对象中。

如何将字符串添加到整数类型的数组列表中?这不是数据完整性问题吗?

更新

下面的答案和这个答案有帮助。谢谢。

4

1 回答 1

6

这是Type Erasure的经典示例。在 Java 中,泛型在编译时被删除并被强制转换所取代。

这意味着您可以这样做,但是ClassCastException当您这样做时,您会得到:

Integer myInt = integers.get(1);

实际上,编译器应该在您这样做时警告您,因为您在调用该方法时会隐式转换List<Something>为。List编译器知道它无法在编译时验证类型安全。

于 2013-06-23T12:38:28.780 回答