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

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条)

报告相同问题?

悬赏问题

  • ¥20 R语言单细胞测序 对seurat对象进行标准化时出现问题
  • ¥15 Anaconda navigator updateor一直更新
  • ¥15 请问如何在matlab里使用raven工具?
  • ¥100 关于ios手游充值到一定金额,再点充值提示公众号的问题。
  • ¥15 求一个stm32串口控制程序
  • ¥20 Windows 驱动开发版本疑问相关
  • ¥15 MAC 未能打开磁盘映像
  • ¥15 fastcap使用,二维导体输入问题
  • ¥15 hosts修改后不能访问
  • ¥15 关于化学反应速率C++编译问题/FLUENT