關於深拷貝和淺拷貝的一些見解。

2021-10-03 13:46:05 字數 1028 閱讀 7940

簡單的複製,

person p1=new person('lisi',23);

person p2=p1

system.out.println(p1==p2)

p2只是對p1的引用,還是指向同乙個位址。

此時可以,選擇clone.

person p1=new person('zhangsan',23);

person p2=(person) p1.clone;

對於person的age屬性他是int,而name則是乙個string型別的字串,他還是乙個引用,

這個時候使用的clone是淺拷貝。p1和p2中的name屬性指向同乙個位址。

想要p2的name屬性新規劃乙個位址。則需要深拷貝

深拷貝需要當前類實現cloneable介面,被拷貝的類也要實現cloneable介面,當前類和被拷貝的在內部要重寫clone方法。

舉個栗子。

body

public class body implements cloneable

public body(head head)

@override

protected object clone() throws clonenotsupportedexception

public static void main(string args) throws clonenotsupportedexception

head

public class head implements cloneable

public head(face face)

@override

protected object clone() throws clonenotsupportedexception

face

public class face 

}

個人理解,請大神指正。

關於深拷貝和淺拷貝

以nsstring與nsmutablestring舉例 nsstring str1 xfj nsmutablestring str2 str1 mutablecopy nslog str1,str2 nslog p p str1,str2 輸出結果 xfj xfj123 0x102701068 0x...

深拷貝和淺拷貝(一)

1.淺拷貝 所謂淺拷貝,指的是在物件複製時,只對物件的資料成員進行複製,但是遇到有動態成員如指標時就會出問題。c sharp view plain copy classrect rect 析構函式,釋放動態分配的空間 private intwidth intheight int p 一指標成員 in...

C 關於深拷貝和淺拷貝

在c 中,資料型別有值型別和引用型別 值型別包括 結構體 數值型別,bool型,使用者定義的結構體 列舉,可空型別。引用型別包括 陣列,使用者定義的類 介面 委託,object,字串。對於值型別的,拷貝是全拷貝,則是拷貝出另乙個物件,兩個物件的記憶體位址是不同的,乙個物件的屬性修改後不影響另乙個物件...