private static ArrayList<ArrayList<Integer>> listlist = new ArrayList<ArrayList<Integer>>();
private static ArrayList<Integer> list = new ArrayList<Integer>();
private static ArrayList<Integer> temp = new ArrayList<Integer>();
public static void main(String args[]) {
list.add(10);
list.add(20);
listlist.add(list);
temp = list;
temp.add(30);
listlist.set(0,temp);
System.out.println("size before temp is cleared: " + listlist.get(0).size());
temp.clear();
System.out.println("size after temp is cleared: " + listlist.get(0).size());
}
Output:
size before temp is cleared: 3
size after temp is cleared: 0
这是导致问题的代码的简化部分。您可以看到如何将temp
添加到listlist
,并且在执行该操作后清除temp
时,listlist
似乎会更新自身并清除索引0中的内容也是
每更改用于插入值的变量,ArrayList
就会自动更新吗?需要帮助。
答案 0 :(得分:1)
arrayList将保留对您提供的内容的引用。在您的情况下,temp和list都是对同一对象的引用(因此,无需在listlist中进行设置)。当您执行temp.clear时,将清除“ temp”和“ list”(相同)引用的列表对象。您的列表列表保留了对该对象的引用。它不是“自动更新自身”。它不需要,它从未复制过。我附上一张图表,可能会帮助您理解。圆圈代表对象。箭头表示存在指向所指向对象的引用(包含在另一个对象中,或者是您的对象,我写了名称/标识符)