先说结论
res.add(list)
为浅拷贝;
res.add(new ArrayList(list))
为深拷贝。
看代码
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> res_2 = new ArrayList<ArrayList<Integer>>();
res.add(list);
res_2.add(new ArrayList<Integer>(list));
System.out.println("res为:");
System.out.println(res);
System.out.println("res_2为:");
System.out.println(res_2);
list.add(4);
res.add(list);
res_2.add(new ArrayList<Integer>(list));
System.out.println("res为:");
System.out.println(res);
System.out.println("res_2为:");
System.out.println(res_2);
}
}
总结
res.add(list)
添加一个list后,list如果改变,res里的值会
跟着改变。
res.add(new ArrayList(list))
添加一个list后,list如果改变,res里的值不会
跟着改变。
参考博客
https://blog.csdn.net/weixin_42707971/article/details/107609388