一、理解什么是浅拷贝 , 什么是深拷贝 ?
- 拷贝 : 顾名思义 ,在 Java当中就是 将一个类 的 属性 通过 get 和 set 方法来 赋值 给到 另一个类当中的属性 .
- 浅拷贝 : 如果是引用类型 , 那么目标对象拷贝的只是源对象的地址 (无论目标对象还是源对象的改变 , 它们都会一起发生改变)[引用的一个内存地址]
- 深拷贝 : 即将源对象的属性值 全部复制到 目标对象相应属性 (复制完之后,它们之间是隔开的 , 没有任何关系 , 无论操作源对象 还是目标对象 都是对另一个没有影响)[将子对象的属性也拷贝过去]
二、BeanUtils.copyProperties方法是深拷贝还是浅拷贝?
- 答 : 浅拷贝 .
- 测试代码 :
public class User {
private int id;
private String username;// 用户姓名
//get set方法此处省略
}
public class Person {
private Object user;
//get set方法此处省略
}
@Test
public void CopyTest(){
//创建对象
User user=new User();
user.setId(1);
user.setUsername("对象1");
Person oldPerson = new Person();
oldPerson.setUser(user);
Person newPerson = new Person();
BeanUtils.copyProperties(oldPerson,newPerson);
System.out.println(newPerson.getUser().toString());
//输出地址
System.out.println("oldPerson = " + oldPerson.getUser());
System.out.println("newPerson = " + newPerson.getUser());
}
打印结果 :