java - java 奇数整数比较

标签 java

如果这是重复的,我会很乐意将其删除,但我找不到它。

为什么第二次比较返回 false?谢谢。

$ cat test.java 

class test {
public static void main(String[] args) {
        Integer num1 = new Integer(0);
        Integer num2 = new Integer(0);
        num1 = 1;
        num2 = 1;

        if (num1 == num2) {
            System.out.println("Numbers are equal");
        }
        num1 = 128;
        num2 = 128;
        if (num1 == num2) {
            System.out.println("Numbers are equal using == ");
                }
        if (num1.equals(num2)) {
            System.out.println("Numbers are equal using .equals");
        }
    }
}
$ javac test.java 
$ java test
Numbers are equal
Numbers are equal using .equals

最佳答案

在 Java 中,整数 应使用 equals() 进行比较,因为它们是对象类型,而不是基元类型。第一个示例之所以有效,是因为 Java 创建了一个介于 -128 和 127 之间的 Integers 池(尽管可以配置此范围),以及它们之间的所有身份比较(使用 ==)会起作用,因为数字是从池中检索的。每次都会创建更大的数字,并且身份比较对它们不起作用 - 这就是为什么为了安全起见,对象之间的所有相等比较都必须使用 equals() 进行,这将始终工作。正如您刚才所看到的,使用 == 有时会起作用,但并非总是起作用。

关于java - java 奇数整数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20206471/

相关文章:

java - 程序在 if 语句之前终止

java - 使用 Elytron 进行 WildFly 和 Java EE 安全配置

将私钥作为字符串的 Java SFTP 客户端

java - 意外的 DecimalFormat 输出 - Java

java - S3 : Generating Pre-Signed URL for a given Key. [ key 可能/不存在]

java - 正则表达式用于屏蔽 Java 中除前两个和最后两个字符之外的字符

java - 仅当从 servlet 访问时,带有日语的自定义 404 错误页面在 Tomcat 5 上变得不可读

java - 如何在netbeans中编译jedit

java - 如何为 JCombobox 中的线条制作独特的字体颜色?

java - 在 Sceneform 中拍照时隐藏 PlaneRenderer