java總結之克隆
阿新 • • 發佈:2019-01-23
概念定義
定義:物件複製就是將一個物件的屬性拷貝到另一個有著相同類型別的物件中去,複製分為:淺複製、深複製、延遲複製三種。
淺複製:淺複製是按位複製物件,它會建立一個新的物件,這個物件有著原始物件屬性值的精確拷貝。若原始物件屬性值是基本型別,拷貝就是基本型別的值,若屬性是引用型別(記憶體地址),拷貝的就是記憶體地址,如果一個物件改變了引用的地址,就會影響到另一個物件
看上圖可知:
由於QuoteObject是一個引用型別,所以CopyObject與SourceObject指向QuoteObject相同的地址
而基本型別則是直接複製值
淺複製的實現:
源物件需要繼承Cloneable介面,複寫clone()方法,在clone方法中呼叫父類的clone()方法
用法:
Source s1 = new Source();
Source s2 = (Source)s1.clone();
其中s1與s2不是相同的,但是s1和s2中的值屬性和引用屬性是相同的深度複製
深度複製:會複製所有的的屬性,拷貝的屬性指向動態分配的記憶體,當物件和它引用的物件一起復制的時候就會發生深複製
深度複製的特點:較於淺複製,開銷較大,速度較慢
看上圖並與淺複製對比可知,在做複製的時候,引用型別的屬性的指向是不相同的。所以在CopyObject中任何改動都不會影響到SourceObject
如何實現深複製:
一樣的源類要實現Cloneable介面,重寫clone方法,在clone方法中建立引用型別的