首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

java代码的疑问解决方案

2012-02-08 
java代码的疑问Java codepublic static void main(String[] args) {// TODO Auto-generated method stubLi

java代码的疑问

Java code
       public static void main(String[] args) {        // TODO Auto-generated method stub                List<Map> list1 = new ArrayList<Map>();        Map map = new HashMap();        map.put("name", "123");        list1.add(map);                for(int i =0;i<list1.size();i++){            Map tempMap = (Map)list1.get(i);            tempMap.put("name", tempMap.get("name")+"@@");        }        System.out.println("list1-->" + list1.get(0).get("name"));    }

代码很简单,相信大家都看懂了,我的疑惑是:为什么list1中放的map的值在经历了一个for循环之后,map拿到的值就变了?毕竟我没有对list1中的map进行任何操作啊?还望各位大侠给小弟指明一下

[解决办法]
你说你没对map操作

tempMap.put("name", tempMap.get("name")+"@@");


上面这段断码又是何意?
[解决办法]
在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换。
[解决办法]
传递的是引用。
[解决办法]
实际上 Map tempMap = (Map)list1.get(i); 这句话实际上就是把你的的引用给了他。。
所以你修改了tempMap 的值就是改了map 引用指向的值。
这句话直接你把他的Key也设置成了一样的就会把原来的替换掉了
tempMap.put( "name ", tempMap.get( "name ")+ "@@ ");
[解决办法]
探讨

引用:

在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换。

老大,没太理解,能否再讲解一下。我是楼“猪”一个!

[解决办法]
List<Map> list1 = new ArrayList<Map>();
Map map = new HashMap();
----------------------------------------------------
Map tempMap = (Map)list1.get(i);
tempMap.put("name", tempMap.get("name")+"@@");
--------------------------------------------------
map 与tempMap 都指向内存中的同一Map 对象,所以tempMap.put("name", tempMap.get("name")+"@@");会对Map进行操作。可以参考下堆栈内存机制和垃圾回收机制中的引用和对象的关系。

热点排行