Java中的List.addAll复制对象
测试代码
import java.util.ArrayList; import java.util.List; /** * @author yannis * @date create time:2016年10月31日 上午11:10:31 * @version 1.0 * @parameter * @since * @return */ public class Demo { public static void main(String[] args) { List<Person> list1 = new ArrayList<Person>(); list1.add(new Person("li","2", 23)); list1.add(new Person("wang","1", 30)); list1.add(new Person("zhang","2", 40)); list1.add(new Person("hu","2", 35)); list1.add(new Person("chen","1", 60)); List<Person> list2 = new ArrayList<Person>(); list2.addAll(list1); list2.get(0).setName("hanmeimei"); list1.get(1).setName("kkkk"); for(Person person:list1){ System.out.println(person.name); } for(Person person:list2){ System.out.println(person.name); } } static class Person{ private String name; private String sex; private Integer age; public Person(String name, String sex, Integer age) { super(); this.name = name; this.sex = sex; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } }
通过测试发现,无论此时修改list1,或者list2 都会影响到两个list.运行结果如下
hanmeimei kkkk zhang hu chen hanmeimei kkkk zhang hu chen
由此可见,使用list.addAll只是把后者的对象的地址指向复制给了前面的list。所以造成一改全改
相关推荐
一、List对象中的T是值类型的情况(int 类型等)...1、对于引用类型的List无法用以上方法进行复制,只会复制List中对象的引用,可以用以下扩展方法复制: static class Extensions { public static IList<T> Clone(t
model VO 值复制 注解 注解实现相同对象,不同对象,集合与集合复制,不再需要手动。 可以对多个对象进行复制,可以指定复制的类型
model VO 值复制 注解 注解实现相同对象,不同对象,集合与集合复制,不再需要手动。 可以对多个对象进行复制,可以指定复制的类型
list to list 将list内容移到另一个list
Java CopyUtil工具类,可以进行对象的深copy,比如:对象里面包含对象,对象里面包含Map,List,Set...等复杂类型的属性都可以copy,copy后的对象与原有对象没有联系,即改变原有对象内容,不会改变copy后的对象里面的...
List的深度复制 浅谈C#中List<T>对象的深度拷贝问题
下面小编就为大家带来一篇浅谈C#中List对象的深度拷贝问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
对象属性值的复制工具类 1.全复制 2.部分复制 3.部分不复制
android 浅复制和深复制-Java Generic Deep Copy 篇
在Python中,经常要对一个list进行复制。对于复制,自然的就有深拷贝与浅拷贝问题。深拷贝与浅拷贝的区别在于,当从原本的list复制出新的list之后,修改其中的任意一个是否会对另一个造成影响,即这两个list在内存中...
为仅实例化的list对象添加数据,list<>.count==0的时候,给其添加数据!
如果 List<T> 里的 T 是引用类型(如myClass类),则在 像这种写法: List<myClass> lists1 = new List() { new myClass(), ...序列化是指将对象转换为字节流的形式,然后保存在内存或者数据库中
5.3 对象复制语意学(Object Copy Semantics) 5.4 对象的功能(Object Efficiency) 5.5 解构语意学(Semantics of Destruction) 第6章 执行期语意学(Runting Semantics) 6.1 对象的构造和解构(Object ...
5.3 对象复制语意学(Object Copy Semantics) 5.4 对象的功能(Object Efficiency) 5.5 解构语意学(Semantics of Destruction) 第6章 执行期语意学(Runting Semantics) 6.1 对象的构造和解构(Object ...
注意: 需要JDK1.8及以上 Bean需要提供无参数的构造方法~ ... 公共无效setList(列表列表){ this.list = 列表; } } 用户.java 公共类用户{ 私有字符串名称; 私有整数年龄; 公共字符串 getName() {
其中包括基本概念+运算符+判断和循环+循环高级和数组+方法+综合练习+面向对象+面向对象综合训练+字符串+集合&学生管理...对象克隆+正则表达式+使劲按+包装类+练习+算法+lambda)+集合(List集合+泛型+Set+数据结构)...
主要介绍了java8 stream 由一个list转化成另一个list案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的...
深度克隆对象,支持循环引用和属性描述符 var clone = require ( '@dmail/object-clone' ) ; var a = { name : 'a' } ; var b = clone ( a ) ; b . name ; // 'a' // of course b != a 它克隆得很深 var a = { ...
copy函数可以将一个对象复制到另一个对象中,这样我们就可以在不改变原始对象的情况下对其进行修改。 copy函数的语法非常简单,只需要在对象后面加上.copy()即可。例如,如果我们想复制一个列表,可以使用以下代码:...