簡單的複製,
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,字串。對於值型別的,拷貝是全拷貝,則是拷貝出另乙個物件,兩個物件的記憶體位址是不同的,乙個物件的屬性修改後不影響另乙個物件...