問題:map拷貝時發現資料會變化。
先看例子:
public
class
copymap
}
上面程式的期望輸出值是,mapfrist的值均為1,
但是實際上輸出結果為:
這裡是因為map發生了淺拷貝,mapfirst只是複製了map的引用,和map仍使用同乙個記憶體區域,所以,在修改map的時候,mapfirst的值同樣會發生變化。
ps:所謂淺複製:則是只複製物件的引用,兩個引用仍然指向同乙個物件,在記憶體中占用同一塊記憶體。被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用仍然指向原來的物件。換言之,淺複製僅僅複製所考慮的物件,而不複製它所引用的物件。
深複製:被複製物件的所有變數都含有與原來的物件相同的值,除去那些引用其他物件的變數。那些引用其他物件的變數將指向被複製過的新物件,而不再是原有的那些被引用的物件。換言之,深複製把要複製的物件所引用的物件都複製了一遍。
如何解決?
使用深拷貝,拷貝整個物件,而非引用
map中有個方法叫做putall方法,可以實現深拷貝,如下:
public
class copymap
}
如上,輸出結果為:
java 複製Map物件(深拷貝與淺拷貝)
淺拷貝 只複製物件的引用,兩個引用仍然指向同乙個物件,在記憶體中占用同一塊記憶體 被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用仍然指向原來的物件 換言之,淺複製僅僅複製所考慮的物件,而不複製它所引用的物件。深拷貝 被複製物件的所有變數都含有與原來的物件相同的值,除去那些引...
Map拷貝 關於物件深拷貝 淺拷貝的問題
問題 map拷貝時發現資料會變化。高能預警,你看到的下面的栗子是不正確的,後面有正確的一種辦法,如果需要看的話的,請看到底,感謝各同學的提醒,已做更正,一定要看到最後 先看例子 publicclasscopymap 上面程式的期望輸出值是,mapfrist的值均為1,但是實際上輸出結果為 這裡是因為...
js 物件深拷貝 深拷貝與淺拷貝
前言 最近在複習一些面試的知識點,剛剛好複習到了這一部分,於是就寫下這篇文章記錄一下。一 值型別和引用型別 在學習深拷貝和淺拷貝之前,我們先來了解一下js的變數型別。值型別 vs 引用型別 值型別 值型別主要有 number,string,boolean,symbol,null,undefined ...