Java中的对象拷贝是指将一个对象的所有属性拷贝到另一个有着相同类型的对象中去。
Java中的对象拷贝主要分为深拷贝和浅拷贝。
浅拷贝
- 对于基本数据型,浅拷贝会将给属性值直接复制一份给对象,也就是两份不同的数据,所以对其中一个对象的变量值进行修改并不会影响另一个对象。
- 对于引用数据类型,浅拷贝进行的对象的引用传递,也就是说讲对象的地址复制一份给新的对象,实际上两个对象指向的是同一个地址,这样在对其中一个对象的成员变量进行修改时会影响另一个对象。
- 浅拷贝实现方式有两种,一个是通过拷贝构造方法实现,另一个是通过重写clone()方法完成
深拷贝
- 对于深拷贝来说,不仅要复制对象的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对象进行深拷贝要对整个对象图进行拷贝。因为创建内存空间和拷贝整个对象图,所以深拷贝速度较慢且花销大。
- 重写clone方法实现深拷贝
与实现浅拷贝的思路一样,不同点在于需要为对象图的每一层的每一个对象都重写clone方法,简单地说就是对每一层的每个对象都实现浅拷贝就等于是实现了深拷贝。