java 引用变量在与一元递增(递减)操作一起使用时未按预期工作

java reference variable not working as expected when used with unary increment(decrement) operations

在下面的代码中,我期望输出为 true, 0。但是输出是 true, 1。由于cnt是Key-Value Pair with Key 3的Value的引用变量。我认为操作cnt--;会改变引用变量指向的值。然而,下面显示的实验代码似乎并没有改变 HashMap 中的值。 我很困惑,因为如果 get 方法 return 是实例的副本,那么 equals 操作应该 return 为假。然而它是 returning 真实的,所以它只是 returning 对一个实例的引用。那为什么那个一元递减运算不起作用?

提前谢谢你。欢迎任何对问题清晰度的反馈。

import java.util.HashMap;
import java.util.Map;

public class Equals {

  public static void main(String[] args) {
    int[] nums1 = new int[] { 1, 2, 3, 4, 5 };

    Map<Integer, Integer> map = new HashMap<>();

    for (int n : nums1) {
      map.put(n, map.getOrDefault(n, 0) + 1);
    }

    Integer cnt = map.getOrDefault(3, 0);
    Integer cnt2 = map.get(3);

    System.out.println(cnt.equals(cnt2));
    cnt--;
    System.out.println(cnt2);

  }
}

-- 操作是对 变量 的操作。在 Integer 变量的情况下,它将变量更新为新的参考值...代表数字 - 1。它相当于

// cnt--;
cnt = Integer.valueOf(cnt.intValue() - 1);

-- 运算符无法更改现有 Integer 对象中保存的值。 Integer 对象是不可变的!

所以...当您增加变量时,它不会影响 HashMap 条目中的值。