c 深轉殖與淺轉殖

2022-03-02 08:17:34 字數 1098 閱讀 2642

我們都知道memberwiseclone 會將淺轉殖。

什麼是淺轉殖?如何深轉殖呢?

public class good

}private static good __good;

private static good __good=new good();

public good createinstance()

public int a=0;

public string b="ab";

pulic class oneclass;

}

測試:

void main()

',student2.oneclass.id);

}

這裡我們得出了結果為9;

ok,那麼這真的是個匪夷所思的問題,明明兩個物件啊。

那麼回歸到淺轉殖上。

當轉殖good的時候是這樣的。

讓good的classone的引用給了新的轉殖物件。

那麼如何深轉殖呢?

深轉殖其實就是將物件序列化,也就是說要深轉殖的話必須物件系列化;

public class serializehelper

} public static t derializable(string target) }

public static t deepclone(t t)

}

改變乙個good 類。

public class good

}private static good __good;

private static good __good=new good();

public good createinstance()

public int a=0;

public string b="ab";

pulic class oneclass;

}

測試一下:

void main()

',student2.oneclass.id);

}

淺轉殖與深轉殖

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