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

我在 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;
}

即使表[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;
}

解决方法

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

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

现在,当您将int x与Integer键进行比较时,该键也将取消装入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中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...