深蓝夜夜 2015-12-22 05:35 采纳率: 60%
浏览 2019
已采纳

Map的值为什么发生了改变

import java.util.HashMap;
import java.util.Map;

public class Test1 {
public static void main(String[] args) {

    Map map = new HashMap();
    Map ma = map;
    for (int i = 0; i < 3; i++) {
        Map<String, String> map2 = new HashMap<String, String>();
        map2.put("sss", "呵呵");
        ma.put(i, map2);
        ma = map2;
    }
    System.out.println(map);
    System.out.println(ma);
}

}

上面的代码中 没有直接操作map 但是结束后map 得到一个链表值
根据下面的回答想清楚了 最近头有点晕晕的 ma 最开始确实是和map是同一个对象 但是在循环中不停的在改变,每次循环结束后都指向了map2 ,每次循环中map2都是一个新对象,第一次循环中在ma中put进去了一个map,但是在第二次循环的时候 ma就是最先被put进去的map2,所以map的值在不停的改变,得到最后的链表,谢谢下面的各位的回复

  • 写回答

4条回答 默认 最新

  • HaleGe 2015-12-22 06:25
    关注

    Map 创建时,JVM会在Heap区去做New操作,实例名称就是一个指针指向创建好的Map对象内存地址,一开始你让一个名为map的“指针”(实际上Java里面不讲指针这个概念,这里只是一种比喻)指向这个Map,后面你又定义了一个名为ma的“指针”指向同样的Map对象,所以它们俩是一样的内容,因此当你对ma进行put后,map内容也一样会变,因为根本就是同一个对象

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么