前言:我們知道物件分引用型別和值型別。
淺轉殖:複製乙個現有物件,引用型別指向同乙個記憶體塊(string為最特殊的物件,這裡當作值型別來看先)
publicshallow copy codeclass
user
public
string username
public list list
public
user shallowcopy()
}class
program
}
輸出值分別為:
1(user.list.count(),這個說引用型別,我們看下面的輸出)
lisi
2(這裡我們在轉殖以後,有新增乙個值,我們說了他們指向同乙個記憶體塊,所以這裡是2)
zhangsan
補充:
乙個物件中的字段有的是值型別的,有的是引用型別的。對於值型別字段來說,它的值就是簡單的值,而對於引用型別來說,它的值是位址。深轉殖:複製乙個現有物件,引用型別指向另乙個記憶體塊(改變轉殖物件的任何乙個值都不會影響其他值)淺複製在複製時,將這個物件的值字段和引用字段(均為非靜態字段)全部複製過去,獲得了這個物件的值和位址。
publicview codeclass
user
public
string username
public list list
public
user clone()};}
}class
program
}
輸出值為:
lst1
lisi
注:
所有引用型別都是深轉殖
c 深轉殖與淺轉殖
我們都知道memberwiseclone 會將淺轉殖。什麼是淺轉殖?如何深轉殖呢?public class good private static good good private static good good new good public good createinstance publi...
轉殖,深轉殖和淺轉殖
轉殖,深轉殖和淺轉殖。1.實現轉殖,繼承cloneable介面,實現clone beanutils.clonebean origin 2.深轉殖和淺轉殖的區別,淺轉殖指的是轉殖的時候僅僅轉殖物件本身 物件的基本變數 而不拷貝物件的引用變數。深轉殖指的是轉殖的時候不僅轉殖物件本身,而且拷貝物件包含的引...
深轉殖和淺轉殖
為什麼需要轉殖?new出來的物件中的屬性都是初始化時候的值,當需要乙個新的物件來儲存當前物件的 狀態 就靠clone方法了。直接使用object a new object object b b a不行嗎,答案是不行的。因為這只是轉殖了引用。如何實現轉殖?首先由兩種轉殖的方式,乙個是深轉殖,乙個是淺轉...