淺拷貝:只複製物件的引用,兩個引用仍然指向同乙個物件,在記憶體中占用同一塊記憶體;
被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用仍然指向原來的物件;
換言之,淺複製僅僅複製所考慮的物件,而不複製它所引用的物件。
深拷貝:被複製物件的所有變數都含有與原來的物件相同的值,除去那些引用其他物件的變數;
那些引用其他物件的變數將指向被複製過的新物件,而不再是原有的那些被引用的物件;
換言之,深複製把要複製的物件所引用的物件都複製了一遍。
使用map物件只能實現淺拷貝
publicstatic
void
main(string args)
//實現淺拷貝方式二:使用map.putall()
parammap2.putall(parammap);
parammap.remove("name");
system.out.println(parammap2);
//{}
}
使用hashmap物件可是實現深拷貝
publicstatic
void
main(string args)
}
實現淺拷貝的方式有兩種:=和map.putall();
實現深拷貝:hashmap.putall()。
大多數情況下,我們需要實現的是深拷貝而不是淺拷貝;
使用map呼叫putall()方法,並不是真正意義上的拷貝,map物件b只是對map物件a進行了引用,當map物件a中的內容發生變化時,map物件b也會發生變化;
使用hashmap呼叫putall()方法才是真正意義上的拷貝。
Map物件的淺拷貝與深拷貝
問題 map拷貝時發現資料會變化。先看例子 public class copymap 上面程式的期望輸出值是,mapfrist的值均為1,但是實際上輸出結果為 這裡是因為map發生了淺拷貝,mapfirst只是複製了map的引用,和map仍使用同乙個記憶體區域,所以,在修改map的時候,mapfir...
複製物件 和 淺拷貝,深拷貝
複製物件顧名思義,複製乙個物件作為副本,它會開闢一塊新的記憶體 堆記憶體 來儲存副本物件,就像複製檔案一樣.既源物件和副本物件是兩塊不同的記憶體區域.物件具備複製功能,必須實現 協議協議 常用的可複製物件有,nsnumber,nsstring,nsarray,nsdictionary,nsmutab...
JS物件複製 深拷貝 淺拷貝
在本文中,我們將從淺拷貝 shallow copy 和深拷貝 deep copy 兩個方面,介紹多種 js 中複製物件的方法。var foo console.log foo.a abc var bar foo console.log bar.a abc foo.a yo foo console.lo...