Aer*_*Cho 3 java comparison if-statement assign
我在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;
}
Run Code Online (Sandbox Code Playgroud)
即使表[pos]和键是相同的,它也不起作用!但我将非常简单的赋值变量添加到另一个变量.这行得通!我不知道为什么会这样.我想知道它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;
}
Run Code Online (Sandbox Code Playgroud)
好吧,如果table[pos]和key都是Integer(并且table[pos]必须是引用类型,因为您要null在while语句中对它进行比较),它们应该与之比较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);
Run Code Online (Sandbox Code Playgroud)
哪个输出:
false
true
Run Code Online (Sandbox Code Playgroud)
代码如下:
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+".");
Run Code Online (Sandbox Code Playgroud)