我正在用 java 制作一个哈希表。 在搜索函数中,我在 IF 语句中做了一些比较。但它没有做任何比较。
这是我的部分代码。
while (table[pos]!=null) {
if (table[pos]==key) {
System.out.println("SEARCH "+key+" at INDEX "+home);
return;
}
else {pos=h(home+p(i));
i++;
}
}
System.out.println("Failed to find "+key+".");
return;
}
即使 table[pos] 和 key 相同也不起作用! 但我添加了非常简单的分配变量给另一个。这行得通!我不知道为什么会这样。我想知道 xD
while (table[pos]!=null) {
int x = table[pos];
if (x==key) {
System.out.println("SEARCH "+key+" at INDEX "+home);
return;
}
else {pos=h(home+p(i));
i++;
}
}
System.out.println("Failed to find "+key+".");
return;
}
最佳答案
好吧,如果 table[pos]
和 key
都是 Integer
(并且 table[pos]
必须是引用类型,因为您在 while
语句中将它与 null
进行比较),它们应该与 equals
进行比较,而不是与 ==
,因为两个不同的 Integer
对象可能具有相同的 int
值。
当您将 table[pos]
分配给 int
变量 x
时,它会被拆箱为原始值。
现在,当您将 int
x
与 Integer
key
进行比较时,key
也被拆箱为 int
,并且 int
比较适用于 ==
。
这可以通过以下简短示例来证明:
Integer i1 = 300;
Integer i2 = 300;
System.out.println (i1 == i2);
int i3 = i1;
System.out.println (i3 == i2);
哪些输出:
false
true
代码代码为:
while (table[pos] != null) {
if (table[pos].equals(key)) {
System.out.println("SEARCH "+key+" at INDEX "+home);
return;
} else {
pos = h(home + p(i));
i++;
}
}
System.out.println("Failed to find "+key+".");
关于java - 为什么如果比较在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47531642/