Java深拷貝與淺拷貝

2021-09-01 18:52:37 字數 1468 閱讀 7687

深拷貝與淺拷貝主要的不同是對於引用變數的拷貝,淺拷貝的引用變數不僅僅是拷貝乙個引用(位址).引用變數的成員也一樣深拷貝。廢話少說下面是兩個拷貝的例子

1.淺拷貝

1

package

com.lightcopy;23

public

class professor implements

cloneable

1011

public

void

setname(string name)

1415

public

intgetage()

1819

public

void setage(int

age)

2223

public professor(string name, int

age)

2728

@override

29public

object clone()

35catch

(clonenotsupportedexception e)

36

3940

return

o;

41}

4243 }

view code

2.深拷貝

1

package

com.deepcopy;23

import

com.lightcopy.professor;45

public

class student implements

cloneable

1213

public

void

setpro(professor pro)

1617

public student(string name, int

age,professor pro)

2223

public

string getname()

2627

public

void

setname(string name)

3031

public

intgetage()

3435

public

void setage(int

age)

3839

@override

40public

object clone() catch

(clonenotsupportedexception ex)

47 obj.pro=(professor)pro.clone();

48return

obj;49}

50 }

view code

java深拷貝與淺拷貝

淺拷貝與深拷貝 淺拷貝 被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用仍然指向原來的物件。換言之,淺複製僅僅複製所考慮的物件,而不複製它所引用的物件。深拷貝 被複製物件的所有變數都含有與原來的物件相同的值,除去那些引用其他物件的變數。那些引用其他物件的變數將指向被複製過的新...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...