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
条目中的值。
在下面的代码中,我期望输出为 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
条目中的值。