今天在開發中發現一個bug。原本List中應該是多個不同的數據,最後卻發現List中的數據都是一樣的。查看代碼發現是在循環add數據時錯誤。特此記錄。
錯誤代碼:
List<Map<String, Integer>> list = new ArrayList<Map<String,Integer>>();
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < 5; i++) {
map.put("id", i);
list.add(map);
}
System.out.println(list.toString());
結果:[{id=4}, {id=4}, {id=4}, {id=4}, {id=4}]
正確代碼:
List<Map<String, Integer>> list = new ArrayList<Map<String,Integer>>();
for (int i = 0; i < 5; i++) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("id", i);
list.add(map);
}
System.out.println(list.toString());
結果:[{id=0}, {id=1}, {id=2}, {id=3}, {id=4}]
結論:這裏是引用傳遞,無論循環多少次,只有一個對象被創建。正確做法是每次循環新建一個對象。