gpt4 book ai didi

Java HashMap 奇怪的行为 if 语句后值发生变化

转载 作者:行者123 更新时间:2023-12-02 03:45:05 26 4
gpt4 key购买 nike

我有两个 HashMap。 mapA.keySet()mapB.keySet() 的子集。我想打印 mapA.get(key) != mapB.get(key) 的每个键。但是下面的代码中出现了一些奇怪的行为:

private static void printMissingNums(int[] a, int[] b) {
Map<Integer, Integer> mapA = intArrToMap(a);
Map<Integer, Integer> mapB = intArrToMap(b);

Set<Integer> missingNums = new TreeSet<Integer>();
for (int key : mapA.keySet()) {
//This version does not work!
if (mapA.get(key) != mapB.get(key)) {
missingNums.add(key);
}

/* This version works (if I comment out the if statement above
and remove the comments around this block of code)
int valA = mapA.get(key);
int valB = mapB.get(key);
if (valA != valB) {
missingNums.add(key);
}
*/
}

// Unrelated to the strange behavior
for (int key : mapB.keySet()) {
if (!mapA.containsKey(key)) {
missingNums.add(key);
}
}

for (int i : missingNums) {
System.out.print(i + " ");
}
}

当我使用第一个 if 语句并想知道幕后发生了什么/为什么它没有像我想象的那样工作时,我会得到奇怪的行为。对于我有权访问的特定输入,它会打印 3 个数字,称为 x、y、z。我检查了 HashMap,发现 mapA.get(x) != mapB.get(x)mapA.get(y) != mapB.get(y)但是mapA.get(z) == mapB.get(z)。

我尝试打印 if 语句之前和之后的值,并且这些值相等,但它以某种方式进入 if 语句。

注释掉的版本按我的预期工作。它只打印出 x 和 y。怎么了?为什么即使我没有更改任何内容,HashMap 值似乎也在变化?

这里是输入:http://pastebin.com/JyYxspjx 。第一行是第一个数组中的元素数量,后跟空格分隔的整数。之后的下一行是第二个数组中的元素数量,后跟空格分隔的整数。

为什么 8622 是唯一具有相同值的键,但比较结果为 false?

最佳答案

不要使用 ==,!= 进行对象比较。请改用 equals()

下面的2个整数是不同的对象:

Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1==i2);//false

将 if 语句更改为:

if (mapA.get(key).equlas(mapB.get(key))) {

关于Java HashMap 奇怪的行为 if 语句后值发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com