有次系统维护我做了一个很小的改动,却出了出乎意料的错误,很是困惑,
原程序示例如下:
- for(int i =0;i<resultList.size();i++){
- Map resultMap = new HashMap();
- resultMap = (Map)resultList.get(i);
- resultGetList.add(resultMap);
- }
- System.out.println("resultGetList = "+resutlGetList);
为了提高程序的效率我认为,第二行不应该放到循环的里面,因为放到里面的话每次循环总汇新建对象,影响速度,所以我改善后如下:
- Map resultMap = new HashMap();
- for(int i =0;i<resultList.size();i++){
- resultMap = (Map)resultList.get(i);
- resultGetList.add(resultMap);
- }
- System.out.println("resultGetList = "+resutlGetList);
但是修改后的结果与预期的结果不同,可是我不清楚问题出在哪里,找了很久也没找出来,修改程序后输出的list总是最后一个map值的重复,这个让我很困惑,我猜测,List.add,是添加的对象,或者说是内存的地址而已,并不是把Map的值存了起来。
本文通过一个具体的Java示例探讨了在循环中直接修改Map对象可能导致的所有元素变为相同值的问题。作者最初尝试优化代码,将Map对象的创建移出循环以提高效率,但发现输出结果与预期不符,所有元素均为最后一个Map的副本。
1011

被折叠的 条评论
为什么被折叠?



