1 Listlist= 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 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