C 淺轉殖和深轉殖的區別和在C 中的體現形式

2022-02-06 07:42:44 字數 912 閱讀 7664

前言:我們知道物件分引用型別和值型別。

淺轉殖:複製乙個現有物件,引用型別指向同乙個記憶體塊(string為最特殊的物件,這裡當作值型別來看先)

public

class

user

public

string username

public list list

public

user shallowcopy()

}class

program

}

shallow copy code

輸出值分別為:

1(user.list.count(),這個說引用型別,我們看下面的輸出)

lisi

2(這裡我們在轉殖以後,有新增乙個值,我們說了他們指向同乙個記憶體塊,所以這裡是2)

zhangsan

補充:

乙個物件中的字段有的是值型別的,有的是引用型別的。對於值型別字段來說,它的值就是簡單的值,而對於引用型別來說,它的值是位址。

淺複製在複製時,將這個物件的值字段和引用字段(均為非靜態字段)全部複製過去,獲得了這個物件的值和位址。

深轉殖:複製乙個現有物件,引用型別指向另乙個記憶體塊(改變轉殖物件的任何乙個值都不會影響其他值)

public

class

user

public

string username

public list list

public

user clone()};}

}class

program

}

view code

輸出值為:

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不行嗎,答案是不行的。因為這只是轉殖了引用。如何實現轉殖?首先由兩種轉殖的方式,乙個是深轉殖,乙個是淺轉...