Java 原始类型和数据完整性列表

Java 原始类型和数据完整性列表,java,generics,arraylist,Java,Generics,Arraylist,在这个例子中 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){ list

在这个例子中

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");
}
publicstaticvoidmain(字符串[]args){
列表整数=新的ArrayList();
整数。加(1);
addToList(整数);
System.out.println(整数);
}
公共静态无效添加列表(列表0){
列表0.添加(“blabl”);
}
这将编译并打印结果

[1,废话]

我的理解是:

引用变量“integers”具有正在传递给addToList方法的arraylist对象的地址(比如111)。因此,在addToList方法中,list0指向具有该对象的同一地址(该对象是Integer类型的arraylist),并向该arraylist对象添加一个字符串

如何向Integer类型的arraylist添加字符串?这不是一个数据完整性问题吗

更新


下面的答案和答案很有帮助。谢谢。

这是一个典型的例子。在Java中,泛型在编译时被删除,并被类型转换替换

这意味着您可以这样做,但当您这样做时,您将得到一个
ClassCastException

Integer myInt = integers.get(1);

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

我只想说
List
,而不是
List
——通配符类型不允许添加任何内容。原始类型
列表
是未经检查的转换发生的原因。@PaulBellora
列表
列表
列表
-太多
列表
的时间太少。你完全正确,这是rawtype而不是我要找的通配符。相关: