一、浅复制
- 将一个对象的引用指向另外一个新的对象,两个对象的引用地址相同

二、深复制
- 通过实现Cloneable接口,重写clone()方法,
- 对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个(和浅拷贝一样)。
- 对于有多层对象的,每个对象都需要实现 Cloneable并重写 clone() 方法。
public class Student implements Cloneable {
public Student(String name, Sex sex) {
this.name = name;
this.sex = sex;
}
private String name;
private Sex sex;
@Override
protected Student clone() throws CloneNotSupportedException {
Student clone = (Student) super.clone();
clone.sex = (Sex) sex.clone();
return clone;
}
}
- 深复制后的对象和原对象引用地址不一样

- BeanUtils.copyProperties属于浅复制
参考内容
- https://www.jianshu.com/p/94dbef2de298