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

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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵