[求助] 物件参考与值传递的传递问题_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3149 | 回复: 0   主题: [求助] 物件参考与值传递的传递问题        上一篇   下一篇 
茶香2222
注册用户
等级:上尉
经验:688
发帖:10
精华:0
注册:2015-11-18
状态:离线
发送短消息息给茶香2222 加好友    发送短消息息给茶香2222 发消息
发表于: IP:您无权察看 2016-5-9 16:10:54 | [全部帖] [楼主帖] 楼主

看完书上的理论,我想说自己练习看看,发现到试不出来,请各位指点:

这是原来的状况,

Map<String,List<String>> map1 = new HashMap<>();
    List<String> aa = new ArrayList<>() ;
    aa.add("a");
    aa.add("b");
    aa.add("c");
    map1.put("1",aa);
    for (Map.Entry<String, List<String>> entry : map1.entrySet()) {
           System.out.println(entry.getKey()+" "+entry.getValue());
    }
    //我把map跟bb物件互相参考
    List<String> bb = map1.get("1");
    bb.add("ss");
    //查看了一下,hashcode一样,存储器位置一样
    System.out.print("map1的hashcode "+map1.get("1").hashCode()+" bb的hashcode"+bb.hashCode()+"\n");
    System.out.print("存储器位置一不一样??::"+ (bb == map1.get("1"))+"\n");
               for(Map.Entry<String, List<String>> entry : map1.entrySet()){
                  System.out.println(entry.getKey()+" "+entry.getValue());


结果是:

1 [a, b, c]

map1hashcode 126145 bbhashcode126145

存储器位置一不一样??::true

1 [a, b, c, ss]

可是问题code在这边

Map<String,List<String>> map1 = new HashMap<>();
    List<String> aa = new ArrayList<>() ;
    aa.add("a");
    aa.add("b");
    aa.add("c");
    map1.put("1",aa);
    for (Map.Entry<String, List<String>> entry : map1.entrySet()) {
            System.out.println(entry.getKey()+" "+entry.getValue());
    }
    //我把map跟b物件互相参考
    Integer b = new Integer(map2.get("1"));
    System.out.print("存储器位置一不一样??:"+ (b == map2.get("1"))+"\n");
    System.out.print("map2的hashcode "+map2.get("1").hashCode()+" b的hashcode"+b.hashCode()+"\n");
    b = b+2;
    for (Map.Entry<String, List<String>> entry : map1.entrySet()) {
            System.out.println(entry.getKey()+" "+entry.getValue());
    }


1 44

2 55

3 44

存储器位置一不一样??:false

map2hashcode 44 bhashcode44

1 44

2 55

3 44

结果不如我预期,因为我原本以为把他指定给物件Integer就可以像上述一样改变

结果居然有hashcode一样但存储器位置不一样的问题,实在不能理解为何会这样

请问是甚摸原因造成这样的结果呢??





赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论