天天看點

java對象深複制、淺複制(深拷貝、淺拷貝)的了解

先看一個例子

可以看到改了map2裡的對象,map1裡的也跟着改了。

所謂淺複制:則是隻複制對象的引用,兩個引用仍然指向同一個對象,在記憶體中占用同一塊記憶體。被複制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺複制僅僅複制所拷貝的對象,而不複制它所引用的對象。          深複制:被複制對象的所有變量都含有與原來的對象相同的值,除去那些引用其他對象的變量。那些引用其他對象的變量将指向被複制過的新對象,而不再是原有的那些被引用的對象。換言之,深複制把要複制的對象所引用的對象都複制了一遍。

注意:直接map2=map1或者map2=map1.clone(),這些都是淺複制,另外map沒有實作Cloneable接口,不過hashmap實作了。

關于java裡克隆的了解:Java中的Cloneable接口了解

利用java的序列化和反序列化,具體參閱java序列化反序列化深入探究(轉)

更多知識可以參閱:Java中的不可變類了解