java - 具有整数键和值的 HashMap : Change in values do not get reflected

标签 java hashmap

我正在尝试示例代码,有些得到了我不理解的结果:

 Map<Integer,Integer> map = new HashMap<>();
 map.put(1, 2);
 System.out.println(map.get(1));
 Integer k = map.get(1);
 k++;
 System.out.println(map.get(1));

结果:

2
2

但由于 Integer 是一个对象,更改也应该反射(reflect)在映射值中吗?那么为什么值没有改变呢?

最佳答案

Integer 是不可变的,k++ 不会改变 Map 中存储的 Integer 的值.它创建一个新的 Integer 实例。

您应该将新值放入 Map 以便修改 Map:

     Map<Integer,Integer> map = new HashMap<>();
     map.put(1, 2);
     System.out.println(map.get(1));
     Integer k = map.get(1);
     k++;
     map.put(1, k);
     System.out.println(map.get(1));

如果 Integer 是一个可变类,并且您会调用一个改变其状态的方法,那么您就不需要将值再次放入 Map .

关于java - 具有整数键和值的 HashMap : Change in values do not get reflected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45531446/

相关文章:

java - 在 Java 中嵌入 HTML 文件

java - 将 double 转换为 byte[] 数组

java - Java 8 中对 HashMap 哈希函数的更改

带有 Hashmap 问题的 Java(基本)多线程

java - 使用 StAX 读取 XML 字符串

java - 错误: "System services not available to Activities before onCreate()" even if I got a onCreate() function

java - 制作一个 Hashmap,其键是字符串,值是 HashSets

java - HashMap.computeIfAbsent 在多线程使用下如何失败?

java - 为什么检查 HashMap 是否具有特定值需要很长时间才能在 for 循环中执行?

java - 如何使用java从日期中获取小时数