如何理解java中的淺拷貝和深拷貝

2021-08-08 23:48:26 字數 617 閱讀 1456

我們並不希望在程式設計中遇到淺拷貝,那麼,怎麼做到深拷貝呢

淺拷貝,也就是在拷貝構造中存在引用賦值,出現**現象,而**會使我們的資料出現一系列的問題

比如這裡有乙個person類:

public class person 

/*//方法1

public person( person p)*/

//方法2

public person( person p)

}

person需要乙個mydate類:

public class mydate 

public mydate()

public mydate(mydate d)

}

當我們使用方法1的使用會出現**現象,而使用方法2就不會

如果拷貝的內容含有物件,那麼就會出現**,我先前也有寫過關於引用賦值必**的博文

當我們拷貝乙個物件的時候,需要一直深入到每乙個物件的基本資料型別,方法是拷貝的時候new乙個物件,具體可以再斟酌上面的**

如何理解深拷貝和淺拷貝

首先我們先記住乙個結論 編譯器自動生成的拷貝構造和賦值運算子是memcpy的乙個過程。例項過程以結構體代替,在c 中struct和class除了預設訪問許可權基本等同。struct teststruct1 int main 拷貝構造直接將onevar的記憶體空間拷貝到twovar的記憶體空間中。考慮...

Java中的深拷貝和淺拷貝

淺拷貝 shallow copy 對於資料型別是基本資料型別的成員變數,淺拷貝會直接進行值傳遞,也就是將該屬性值複製乙份給新的物件。因為是兩份不同的資料,所以對其中乙個物件的該成員變數值進行修改,不會影響另乙個物件拷貝得到的資料。對於資料型別是引用資料型別的成員變數,比如說成員變數是某個陣列 某個類...

理解「淺拷貝」和「深拷貝」

淺拷貝 將原物件 原陣列 的 引用 直接賦給新物件 新陣列 新物件 新陣列 是原物件 原陣列 的乙個引用。如果改變這個新物件 新陣列 原物件 原陣列 就會改變。深拷貝 將原物件的各項屬性的 值 陣列的所有元素 都拷貝給新物件 新陣列 是拷貝的 值 而不是 引用 為什麼要使用深拷貝?希望改變新物件 新...