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
。