Java arraylist清除或重新初始化

Java arraylist清除或重新初始化,java,arraylist,Java,Arraylist,考虑以下代码: 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 Arra

考虑以下代码:

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);
    }
}
import java.util.ArrayList;
公共班机{
公共静态void main(字符串参数[]){
ArrayList测试=新的ArrayList();
ArrayList a=新的ArrayList();
a、 增加(7);
测试。添加(a);
系统输出打印LN(测试);
a、 清除()
系统输出打印LN(测试);
}
}
测试的输出将不同(一个是[[7]],另一个是[[]]) 如果我们使用a=new ArrayList()而不是a.clear(),结果会有所不同。我认为“测试”已经记录了“a”,所以我可以在不改变“测试”的情况下对“a”做任何事情。 谁能告诉我当我使用.clear()并纠正我的想法时会发生什么?谢谢

我以为“测试”已经记录了“a”,所以我可以做任何事情 关于“a”而不改变“测试”

通过存储对
a
保存的同一对象的引用来记录
a
。当你这样做的时候

a.clear()

您正在对同一对象调用
clear
方法。

a.clear()
删除列表中的所有数据。它直接影响对象a及其数据
a=new ArrayList()
将创建一个新的ArrayList,并将其引用分配给变量
a
。由于
test
存储a的旧引用,因此结果仍然是[[7]]

如何存储值而不是引用?我的意思是如果我把“a”改为a,加上(4);整个“测试”将会改变。但我希望测试能保持不变。我该怎么办?@Pugna你不能。变量的值是对对象的引用,而不是对象本身
a.add(4)
仍在添加到
a
引用的对象。如果要添加到其他/新列表,请创建一个列表,并将其引用指定给
a