淺轉殖:被轉殖物件的所有變數都含有與原來物件相同的值,而所有的對其他物件的引用仍然指向原來的物件。換言之,淺轉殖僅僅轉殖所考慮的物件,而不轉殖它所引用的物件。
深轉殖:被轉殖物件的所有變數都含有與原來物件相同的值,除去那些引用其他物件的變數。那些引用其他物件的變數將指向被轉殖的新物件,而不再是原有的那些被引用的物件。換言之,深轉殖把轉殖的物件所引用的物件都轉殖了一遍
淺轉殖示例
public class clonetest
}public class student implements cloneable
public void setage(int age)
public string getname()
public void setname(string name)
public teacher getteacher()
public void setteacher(teacher teacher)
@override
protected object clone() throws clonenotsupportedexception
protected object clonedeep() throws clonenotsupportedexception
}public class teacher implements cloneable
public void setage(int age)
public string getname()
public void setname(string name)
@override
protected object clone() throws clonenotsupportedexception
}
利用序列化來做深轉殖
把物件寫到流裡的過程是序列化(serilization)過程,而把物件從流中讀出來的過程則叫做反序列化(deserialization)過程。應當指出的是,寫在流裡的是物件的乙個拷貝,而物件仍然存在於jvm裡面
public class clonetest2
}public class student2 implements serializable
public void setage(int age)
public string getname()
public void setname(string name)
public teacher2 getteacher()
public void setteacher(teacher2 teacher)
public object deepclone() throws ioexception, classnotfoundexception
}public class teacher2 implements serializable
public void setage(int age)
public string getname()
public void setname(string name)
}
淺轉殖與深轉殖
clone 方法是object中的乙個方法 淺轉殖 shallow copy employee cindy tobby.clone 深轉殖 deep copy 必須實現cloneable介面 class employee implements cloneable 如果物件中有引用型別,就必須使用深度...
淺轉殖與深轉殖
一般實現陣列轉殖的方法都是淺轉殖,直接將儲存在棧中的值賦值給對應變數,如果是基本資料型別,則直接賦值對應的值,如果是引用型別,則賦值的是位址 slice let arr2 arr1.slice 0 concat let arr2 arr1.concat 擴充套件運算子 ary let arr2 ar...
c 深轉殖與淺轉殖
我們都知道memberwiseclone 會將淺轉殖。什麼是淺轉殖?如何深轉殖呢?public class good private static good good private static good good new good public good createinstance publi...