先看一個例子
可以看到改了map2裡的對象,map1裡的也跟着改了。
所謂淺複制:則是隻複制對象的引用,兩個引用仍然指向同一個對象,在記憶體中占用同一塊記憶體。被複制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺複制僅僅複制所拷貝的對象,而不複制它所引用的對象。 深複制:被複制對象的所有變量都含有與原來的對象相同的值,除去那些引用其他對象的變量。那些引用其他對象的變量将指向被複制過的新對象,而不再是原有的那些被引用的對象。換言之,深複制把要複制的對象所引用的對象都複制了一遍。
注意:直接map2=map1或者map2=map1.clone(),這些都是淺複制,另外map沒有實作Cloneable接口,不過hashmap實作了。
關于java裡克隆的了解:Java中的Cloneable接口了解
利用java的序列化和反序列化,具體參閱java序列化反序列化深入探究(轉)
更多知識可以參閱:Java中的不可變類了解