深拷贝和浅拷贝?

深拷贝和浅拷贝?
- 浅拷贝:浅拷贝仅复制被拷贝对象的成员变量值,包括基本数据类型的值和引用数据类型变量的地址值。对于引用类型变量指向的堆中的对象,浅拷贝只复制其地址,因此被拷贝对象和拷贝后的对象会共享同一个对象实例。
- 深拷贝:深拷贝是完全拷贝一个对象,包括被拷贝对象的成员变量和堆中的对象。深拷贝会创建一个全新的对象实例,并将被拷贝对象中的成员变量值复制到新的对象中,包括引用类型变量指向的对象也会被复制一份。
以一个示例对象order为例,其中包含一个products列表,下面是浅拷贝和深拷贝的示意图:
因此深拷贝是安全的,浅拷贝的话如果有引用类型,那么拷贝后对象,引用类型变量修改,会影响原对象。
浅拷贝如何实现呢?
Object 类提供的 clone()方法可以非常简单地实现对象的浅拷贝。
深拷贝如何实现呢?
- 重写克隆方法:重写克隆方法,引用类型变量单独克隆,这里可能会涉及多层递归。
- 序列化:可以先将原对象序列化,再反序列化成拷贝对象。