一、引用拷贝
常见的变量赋值操作,即把引用地址进行复制,不属于对象拷贝。
二、浅拷贝
- 浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点,引用拷贝不会创建新的对象)
- 如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
@Override
public Address clone() {
try {
return (Address) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
三、深拷贝
- 深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
@Override
public Person clone() {
try {
Person person = (Person) super.clone();
person.setAddress(person.getAddress().clone());
return person;
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}