带有整数键和值的HashMap:值的变化不会被反映出来

时间:2017-08-06 11:15:49

标签: 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是一个对象,变化也应该反映在地图值中?那么为什么值会改变?

2 个答案:

答案 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对象的值!