Java引用变量在与一元自增(自减)操作一起使用时不能按预期工作



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

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

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条目中的值。

最新更新