List<Map<String, Object>>保存的是引用数据类型的地址

    xiaoxiao2021-03-31  34

    今天敲代码的时候遇到一个有意思的问题,直接上代码:

    List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); Map<String, Object> map = new HashMap<String, Object>(); for(int i=0;i<5;i++) { map.put("a", i); map.put("b", i); list.add(map); } System.out.println(list);

    输出结果是:[{b=4, a=4}, {b=4, a=4}, {b=4, a=4}, {b=4, a=4}, {b=4, a=4}];

    List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();     Map<String, Object> map = null;     for(int i=0;i<5;i++) {     map = new HashMap<String, Object>();     map.put("a", i);     map.put("b", i);     list.add(map);     }     System.out.println(list);

    输出结果是:[{b=0, a=0}, {b=1, a=1}, {b=2, a=2}, {b=3, a=3}, {b=4, a=4}];这才是我想要的,有经验的朋友可能已经知道我要说什么了,下面做出简单解释。

    List和Map都是引用数据类型,list.add(map)保存的是map这个实例化对象的地址,前面那种写法在for循环外面实例化,虽然每循环一次map的值都在改变后添加到list 当中,但是都是添加的同一个map对象的地址,所以在循环了四次后,list中四个map都是同样的值;正确的写法应该是在for循环中实例化map,这样循环一次就实例化一 个map对象,这样list保存的就是不同的map对象的地址,才能得到正确的结果;其他引用数据类型也是同样的道理,跟我一样缺乏经验的同学要注意咯,哈哈!

    其实这个概念在刚学java的时候就知道了,但是在实际写代码的过程中居然没有注意,还是经验不足啊,纸上得来终觉浅,绝知此事要躬行,编程还是得多练,这样才能消化理论知识啊。

    fighting!

    转载请注明原文地址: https://ju.6miu.com/read-665353.html

    最新回复(0)