Spring当中的BeanUtils.copyProperties方法是深拷贝还是浅拷贝?

一、理解什么是浅拷贝 , 什么是深拷贝 ?

  •  拷贝 :  顾名思义 ,在 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());
    }

打印结果 :

        

猜你喜欢

转载自blog.csdn.net/qq_70095877/article/details/130915767