List保存的是引用数据类型的地址

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

List> list = new ArrayList>();    	
	Map map = new HashMap();
    	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> list = new ArrayList>();
    	Map map = null;
    	for(int i=0;i<5;i++) {
    		map = new HashMap();
    		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!
 
   

 
   

 
   
 
  


你可能感兴趣的:(java)