循环 List.add()不同对象,最后List中全是最后添加的那个对象

  今天在开发中发现一个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}]

结论:这里是引用传递,无论循环多少次,只有一个对象被创建。正确做法是每次循环新建一个对象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章