Map拷貝 關於對象深拷貝 淺拷貝的問題

map

上面程序的期望輸出值是,
mapFrist的值均爲1,
但是實際上輸出結果爲:
{key1=1}
{key2=2, key1=1}

這裏是因爲map發生了淺拷貝,mapFirst只是複製了map的引用,和map仍使用同一個內存區域,所以,在修改map的時候,mapFirst的值同樣會發生變化。
淺複製:則是隻複製對象的引用,兩個引用仍然指向同一個對象,在內存中佔用同一塊內存。被複制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺複製僅僅複製所考慮的對象,而不復制它所引用的對象。
深複製:被複制對象的所有變量都含有與原來的對象相同的值,除去那些引用其他對象的變量。那些引用其他對象的變量將指向被複制過的新對象,而不再是原有的那些被引用的對象。換言之,深複製把要複製的對象所引用的對象都複製了一遍。

如何解決?
使用深拷貝,拷貝整個對象,而非引用
Map中有個方法叫做putAll方法,可以實現深拷貝,如下

map.putAll()

如上,輸出結果爲:
{key1=1}
{key1=1}

發佈了32 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章