深拷貝與淺拷貝

2021-10-01 05:35:13 字數 924 閱讀 4974

通俗理解就是:在物件拷貝過程中,淺拷貝不會新建立乙個物件而只拷貝物件的引用,深拷貝會新建立乙個物件。

假設有乙個user類,乙個child類。其中user類中有child型別的成員變數。

public

class

user

implements

cloneable

catch

(clonenotsupportedexception exception)

return null;}}

class

child

implements

cloneable

catch

(clonenotsupportedexception exception)

return null;

}}

若要對user類進行拷貝,那麼成員變數child怎麼處理,?

public

static

void

main

(string[

] args)

輸出為false、true。可見雖然user1和user2是兩個不同的物件,但是成員變數child都是指向的同乙個物件,此為淺拷貝!

當需要深拷貝時,在重寫clone方法時,涉及到引用資料型別都進行拷貝。淺拷貝也就變成了深拷貝。

如將上面的user類的clone方法重寫為:

@override

public object clone()

catch

(clonenotsupportedexception exception)

return null;

}

如此以來再執行main入口將返回false,false。深拷貝成功。

「淺拷貝」與「深拷貝」

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

淺拷貝與深拷貝

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

「淺拷貝」與「深拷貝」

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