今天在开发中发现一个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}]
结论:这里是引用传递,无论循环多少次,只有一个对象被创建。正确做法是每次循环新建一个对象。