List的深度copy和浅度拷贝

 1         List<Student> list= Arrays.asList(
 2                          new Student("Fndroid", 22, Student.Sax.MALE, 180),
 3                          new Student("Jack", 20, Student.Sax.MALE, 170),
 4                          new Student("Liliy", 18, Student.Sax.FEMALE, 160)
 5         );
 6         List<Student> list2= new ArrayList<>();
 7         list2.addAll(list);
 8         list.get(0).setAge(15);
 9 
10         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

posted @ 2018-10-31 20:35  feibazhf  阅读(477)  评论(0编辑  收藏  举报