深拷貝和淺拷貝

2021-10-18 22:21:35 字數 2556 閱讀 3080

employee e=

newemployee

("zhangsa"

,"232",23

);employee e2=e;

sout

(e);

sout

(e2)

;//結果hashcode相同

上述操作叫做引用拷貝,物件建立在棧中,e儲存著物件的引用位址,而e2=e則是將引用位址賦值給e2,即e2同e一起指向棧中的同乙個物件

employee e=

newemployee

("zhangsa"

,"232",23

);employee clone=null;

clone =

(employee) e.

clone()

;sout

(e);

sout

(clone)

;

上述操作叫做物件拷貝,會建立乙個新的employee物件,只是屬性都相同

要求:被拷貝物件實現cloneable介面,並且重寫clone方法

被複製的物件的所有變數值都與源物件相同,源物件中的引用物件屬性也會指向同乙個物件,即淺拷貝不會複製源物件中的物件,會與其共享同乙個物件。

public

class

employee

implements

cloneable

public string getname()

public

void

setname

(string name)

public string getnum()

public

void

setnum

(string num)

public

intgetage()

public

void

setage

(int age)

public address getaddress()

public

void

setaddress

(address address)

@override

protected object clone()

throws clonenotsupportedexception

}public

static

void

main

(string[

] args)

throws clonenotsupportedexception

結果

與淺拷貝的不同在於,複製源物件的屬性,連同物件屬性一起複製乙份,即會建立新的屬性物件,並不會同源物件共用

public

class

employee

implements

cloneable

public string getname()

public

void

setname

(string name)

public string getnum()

public

void

setnum

(string num)

public

intgetage()

public

void

setage

(int age)

public address getaddress()

public

void

setaddress

(address address)

//源物件重寫clone方法時,建立手動去建立物件屬性,物件屬性也需要去實現cloneable介面,並重寫clone物件

@override

protected object clone()

throws clonenotsupportedexception

}public

static

void

main

(string[

] args)

throws clonenotsupportedexception

結果:

淺拷貝時,如果我們去修改的是string型別的屬性,按理來說無論是哪個去修改,他們都是指向同乙個string物件。

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...

深拷貝和淺拷貝

ios提供了copy和mutablecopy方法,顧名思義,copy就是複製了乙個imutable的物件,而mutablecopy就是複製了乙個mutable的物件。以下將舉幾個例子來說明。1 系統的非容器類物件 這裡指的是nsstring nsnumber等等一類的物件。nsstring stri...