浅拷贝概念:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间,浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这个内存空间的所有指针需要重新定义,不然会造成野指针错误。
当使用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
结论:原对象内的属性有其他对象使用此工具类时,目标对象内此属性对象值变更影响原对象