循環 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}]

結論:這裏是引用傳遞,無論循環多少次,只有一個對象被創建。正確做法是每次循環新建一個對象。

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