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

标签 java if-statement comparison 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;
}

即使 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 xInteger 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/

相关文章:

java - hibernate 一对一关系: Unable to delete the child table

c - if 语句仅适用于某些值

python:为什么 IDLE 比终端慢?

MySQL:查找数据库和数组中的值之间的存在性

java - 转换为 BufferedImage 时 PDFBox 错误 : NoClassDefFoundError: org/apache/fontbox/FontBoxFont

Java 从 ActionListener 调用方法

java - 通过 JDBC 为 MySQL 使用 Java 中的 AutoCommit 语句的最佳实践

arrays - 如果有多个条件则求和

java - 对应的then子句没有正常完成

arrays - 将单个字符串向上移动到上一行