List的深度copy和浅度拷贝

时间:2023-03-09 18:54:44
List的深度copy和浅度拷贝
         List<Student> list= Arrays.asList(
new Student("Fndroid", 22, Student.Sax.MALE, 180),
new Student("Jack", 20, Student.Sax.MALE, 170),
new Student("Liliy", 18, Student.Sax.FEMALE, 160)
);
List<Student> list2= new ArrayList<>();
list2.addAll(list);
list.get(0).setAge(15); System.out.println(list2.get(0).getAge());

上面一段代码 你会发现 list2里的第一个元素也是15,也就是说你虽然拷贝了一个list,但是还是指向原来的对象,你改变原来的对象的属性值,拷贝的list里的对象属性也会变,

大家应该理解浅拷贝和深拷贝的区别:

浅拷贝:被复制对象的任何变量都含有和原来的对象相同的值,而任何的对其他对象的引用仍然指向原来的对象。对拷贝后的引用的修改,还能影响原来的对象。

深拷贝:把要复制的对象所引用的对象都复制了一遍,对现在对象的修改不会影响原有的对象。

参考资料:

ArrayList的深度copy和浅度拷贝:https://blog.csdn.net/zouqingfang/article/details/46623563
 项目中copy List 数据,解决修改值后改变原值问题:https://my.oschina.net/farces/blog/277488