我正在尝试示例代码,有些得到了我不理解的结果:
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/