深轉殖與淺轉殖

2021-09-01 17:09:33 字數 1619 閱讀 2254

淺轉殖:被轉殖物件的所有變數都含有與原來物件相同的值,而所有的對其他物件的引用仍然指向原來的物件。換言之,淺轉殖僅僅轉殖所考慮的物件,而不轉殖它所引用的物件。

深轉殖:被轉殖物件的所有變數都含有與原來物件相同的值,除去那些引用其他物件的變數。那些引用其他物件的變數將指向被轉殖的新物件,而不再是原有的那些被引用的物件。換言之,深轉殖把轉殖的物件所引用的物件都轉殖了一遍

淺轉殖示例

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...