天天看點

java 實作對象的淺拷貝 深拷貝的方法,重寫clone方法

如果想要深拷貝一個對象, 這個對象必須要實作Cloneable接口,實作clone方法,并且在clone方法内部,把該對象引用的其他對象也要clone一份

詳解Java中的clone方法

1.淺拷貝

在java中,對象建立後需要有一個引用變量來指向該對象實際的位址空間,也就是說引用變量與對象實體是兩個不同的資料體。在Object類的clone()方法中,對對象字段進行複制時,如果字段是基本資料類型(如int、double等),則會複制字段的值到一個新的變量中,而字段是引用類型,則僅會将引用值複制給新對象中的相應字段中,也就是說,兩個字段指向了同一個對象執行個體。

(新對象==舊對象為false,但是新對象和舊對象指向同一個記憶體空間)

2.深拷貝

對于引用型變量,深拷貝會開辟一塊新的記憶體空間,将被複制引用所指向的對象執行個體的各個屬性複制到新的記憶體空間中,然後将新的引用指向塊記憶體(也就是一個新的執行個體)。要想實作深拷貝的功能,我們在重寫clone()方法的時候,就不能再簡單地調用Object的本地clone()方法。

java中clone方法的了解(深拷貝、淺拷貝)

繼續閱讀