浅拷贝
浅拷贝的对象, 对于基本数据类型, 拷贝值, 而引用变量和包装类型只拷贝内存地址. 改变其中一个引用变量内的属性会影响到另外一个对象.
Java中从Object
中继承的clone()
方法默认实现的是浅拷贝.
深拷贝
深拷贝的对象, 所有引用变量都与原对象指向不同的内存地址, 但内容完全相同. 改变引用对象内容不影响另一个.
如何实现?
- 将可拷贝对象实现接口
Cloneable
, 重写clone()
接口 - 浅拷贝对象, 直接调用
super.clone()
- 深拷贝对象, 需要我们自定义如何实现.
比如Person里面有一个嵌套属性spouse, 则需要重新new一个Person类, 将旧对象spouse属性中的值赋予新spouse, 这样返回的spouse不会是同一个引用地址.