將一個對象的引用複製給另外一個對象,一共有三種方式。第一種方式是直接賦值,第二種方式 是淺拷貝,第三種是深拷貝。所以大家知道了哈,這三種概念實際上都是為了拷貝對象。
1. 直接賦值複製
直接賦值。在 Java 中,A a1 = a2,我們需要理解的是這實際上覆制的是引用,也就是 說 a1 和 a2 指向的是同一個對象。因此,當 a1 變化的時候,a2 裡面的成員變量也會跟 著變化。
2. 淺複製(複製引用但不復制引用的對象)
創建一個新對象,然後將當前對象的非靜態字段複製到該新對象,如果字段是值類型的, 那麼對該字段執行復制;如果該字段是引用類型的話,則複製引用但不復制引用的對象。 因此,原始對象及其副本引用同一個對象。
class Resume implements Cloneable{
public Object clone() {
try {
return (Resume)super.clone(); } catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
3. 深複製(複製對象和其應用對象)
深拷貝不僅複製對象本身,而且複製對象包含的引用指向的所有對象。
4. 序列化(深 clone 一中實現)
在 Java 語言裡深複製一個對象,常常可以先使對象實現 Serializable 接口,然後把對 象(實際上只是對象的一個拷貝)寫到一個流裡,再從流裡讀出來,便可以重建對象。