为什么如果比较在java中不起作用

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)

Era*_*ran 7

好吧,如果table[pos]key都是Integer(并且table[pos]必须是引用类型,因为您要nullwhile语句中对它进行比较),它们应该与之比较equals,而不是与之比较==,因为两个不同的Integer对象可能具有相同的int值.

分配table[pos]int变量时x,它将取消固定为原始值.

现在,当你比较它int xInteger 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)