Java中res.add(list)和res.add(new ArrayList<Integer>(list))的区别

先说结论

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

猜你喜欢

转载自blog.csdn.net/Awt_FuDongLai/article/details/110469066