我們都知道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...