淺拷貝
淺拷貝的對象, 對于基本數(shù)據(jù)類型, 拷貝值, 而引用變量和包裝類型只拷貝內(nèi)存地址. 改變其中一個引用變量內(nèi)的屬性會影響到另外一個對象.
Java中從Object
中繼承的clone()
方法默認實現(xiàn)的是淺拷貝.
淺拷貝模型
深拷貝
深拷貝的對象, 所有引用變量都與原對象指向不同的內(nèi)存地址, 但內(nèi)容完全相同. 改變引用對象內(nèi)容不影響另一個.
深拷貝模型
如何實現(xiàn)?
- 將可拷貝對象實現(xiàn)接口
Cloneable
, 重寫clone()
接口 - 淺拷貝對象, 直接調(diào)用
super.clone()
- 深拷貝對象, 需要我們自定義如何實現(xiàn).
比如Person里面有一個嵌套屬性spouse, 則需要重新new一個Person類, 將舊對象spouse屬性中的值賦予新spouse, 這樣返回的spouse不會是同一個引用地址.