Java 整数在比较两个整数时返回奇怪的结果?

标签 java android

    Integer i1= new Integer(9);
    Integer i2= new Integer(9);

    if(i1==i2){
        System.out.println("true");
    }else{
        System.out.println("false");
    }


    int i3=9;
    int i4=9;

    if(i3==i4){
        System.out.println("true");
    }else{
        System.out.println("false");
    }

    if(i3==i2){
        System.out.println("true");
    }else{
        System.out.println("false");
    }

在上面的代码中,首先 if-else 打印 false,为什么?但是当第二个返回 true 并且第三个也有 true 时。我认为包装类(如 double、boolean、char)无法比较 True?

最佳答案

First if-else print false. Why?

== 检查两个引用是否指向同一个对象,在这种情况下它们不是,所以 == 检查为 false。您需要使用 Integer.equals(),而不是 ==:

if (i1.equals(i2){
    System.out.println("true");
}else{
    System.out.println("false");
}

Second return true

== 用于原语是正确的:int 是原语。

third have true

正如 JB Nizet 指出的那样i2unboxedint,它使 if 条件成为两个 int 原语之间的检查。

关于Java 整数在比较两个整数时返回奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429185/

相关文章:

java - Netbeans 中的 Lambda 表达式问题

android - AppBarLayout 与 ConstraintLayout 重叠

java - 将数据从 JNI 函数返回到 Android 应用程序代码

android - 在 Android 2.1 中方向更改期间保存 WebView 滚动位置时出现问题

java - 如何在 AsyncTask 中运行 ProgressDialog

android - 选项卡 Activity 中的 fragment 在旋转时丢失所有数据?

java - 如何从java中使用制表符分隔符的行中提取字段

java - "Class does not have a main method"

java - 给WEB用户发送FCM通知时如何设置ttl(time to live)?

java - 对 Java ArrayList 的一部分进行排序