深蓝夜夜 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 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题