我正在尝试示例代码,有些得到了我不理解的结果:
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是一个对象,变化也应该反映在地图值中?那么为什么值不会改变?
答案 0 :(得分:2)
Integer
是不可变的,k++
不会更改Integer
中存储的Map
的值。它会创建一个新的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
中。
答案 1 :(得分:1)
你的错误概念:整数是不可改变的!
这意味着k ++会创建一个新的Integer对象。无法更改现有Integer对象的值!