javabean浅复制的问题

浅复制的时候,如果本里面包含了对象这个就会出现问题,bean里面的对bean的引用是地址的引用而非真正实体的引用,

        List<Student> list = new ArrayList<>();
        list.add(new Student("小哥","女人", "lalalalaalala"));
        Student student = new Student("大哥","女人", "null");
        Person person = new Person("11","老师","女",student,list);
        Person person1 = new Person();

        BeanUtils.copyProperties(person,person1);
        student.setFactior("地球人");
        list.get(0).setGirlFriends("我爱你中国,你会在哪里啊啊,在哪里啊");
        System.out.println(person);
        System.out.println(person1);

结果如下所示:

Person{id='11', name='老师', sex='女', student=Student{name='大哥', factior='地球人', girlFriends='null'}, list=[Student{name='小哥', factior='女人', girlFriends='我爱你中国,你会在哪里啊啊,在哪里啊'}]}
Person{id='11', name='老师', sex='女', student=Student{name='大哥', factior='地球人', girlFriends='null'}, list=null}

如果你对引用对象的修改,会导致原来bean里面的bean的属性也会被修改的(对象对对象的引用是由对象之家的的地址检进行连接的,正如上面所写对象属性的修改导致整个对象属性之间的修改),对于list集合潜伏着不会将其复制过去,对象之间的clone也属于浅复制的一项。
要实现真正的深复制,我个建议使用二进制流来进行文件流来进行,这样就会将地址重新复制*(将该对象序列化成流,因为写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面。所以利用这个特性可以实现对象的深拷贝)

   先将其序列化进行二进制的读取
   ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream oo = new ObjectOutputStream(bo);
    oo.writeObject(o);
    然后反序列化,从流里读取出来,即完成复制
    ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
    ObjectInputStream oi = new ObjectInputStream(bi);
     outer = (Outer) ois.readObject();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值