请考虑以下代码:
import java.util.ArrayList;
public class Main{
public static void main(String args[]){
ArrayList<ArrayList<Integer>> test = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(7);
test.add(a);
System.out.println(test);
a.clear()
System.out.println(test);
}
}
测试的输出会有所不同(一个是[[7]],另一个是[[]]) 如果我们使用a = new ArrayList()而不是a.clear(),结果会有所不同。我认为“测试”已经记录了“a”所以我可以做任何关于“a”的事情而不改变“测试”。 任何人都可以告诉我当我使用a.clear()并纠正我的想法时会发生什么?谢谢。
答案 0 :(得分:1)
我认为“测试”已经记录了“a”所以我可以做任何事情 关于“a”而不改变“测试”。
通过存储a
所持有的同一对象的引用来记录a
。当你这样做
a.clear()
您正在同一个对象上调用clear
方法。
答案 1 :(得分:0)
a.clear()
删除列表中的所有数据。它直接影响对象a及其数据。 a = new ArrayList()
将创建一个新的ArrayList并将其引用分配给变量a
。由于test
存储结果的旧引用仍为[[7]]