BeanUtils.copyProperties为浅拷贝慎用(org.springframework.beans)

浅拷贝概念:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间,浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这个内存空间的所有指针需要重新定义,不然会造成野指针错误。

当使用BeanUtils.copyProperties时如果原对象内属性包含其他对象,当改变目标对象中此属性时会改变原对象的值。

创建两个实体类:

public class Person {
    private User user;

    private String sex;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
public class User {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

测试:

       //创建原对象
        Person sourcePerson = new Person();
        User sourceUser = new User();
        sourceUser.setAge(40);
        sourceUser.setName("汪峰");
        sourcePerson.setUser(sourceUser);
        sourcePerson.setSex("男");

        //创建目标对象
        Person targetPerson = new Person();
        BeanUtils.copyProperties(sourcePerson, targetPerson);

        //更改目标对象中的值
        targetPerson.getUser().setName("章子怡");
        targetPerson.setSex("女");
        targetPerson.getUser().setAge(130);

        //打印原数据的值
        System.out.println(sourcePerson.getUser().getName());
        System.out.println(sourcePerson.getSex());
        System.out.println(sourcePerson.getUser().getAge());

结果依次为:章子怡,   男,     130

结论:原对象内的属性有其他对象使用此工具类时,目标对象内此属性对象值变更影响原对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值