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

Java整数在比较两个整数时返回奇怪的结果?,java,android,Java,Android,在上面的代码中,如果else打印false,为什么?但是当第二个返回true,第三个也有true时。我认为包装类(比如double、boolean、char)不能比较true? 首先,如果其他打印错误。为什么? =检查两个引用是否引用了相同的对象,在这种情况下,它们不是这样的=检查为false。您需要使用Integer.equals(),而不是=: Integer i1= new Integer(9); Integer i2= new Integer(9); if(i1

在上面的代码中,如果else打印false,为什么?但是当第二个返回true,第三个也有true时。我认为包装类(比如double、boolean、char)不能比较true?

首先,如果其他打印错误。为什么?

=
检查两个引用是否引用了相同的对象,在这种情况下,它们不是这样的
=
检查为
false
。您需要使用
Integer.equals()
,而不是
=

    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");
    }
第二次返回真值

=
用于基本体是正确的:
int
是基本体

第三个是真的


正如
i2
所指出的,
int
使
if
条件在两个
int
原语之间进行检查。

运算符==正在检查两个引用是否相等。在您的示例中,实例化两个integer类型的不同对象,然后询问它们是否相同


如果要比较整数对象的值,请使用.compare()函数或.equals,如果只想检查是否相等。

变量
i1
i2
引用的是对象,而不是基本类型。对Java中的对象使用
==
操作符检查引用是否相等,如果要比较它们,应使用
.equals()
方法

i3
i2
的比较返回true,因为您正在将一个基元类型(int
i3
)与该基元类型的包装类(Integer
i2
)进行比较,所以Java将
i2
的值解装箱为一个
int
,然后进行比较(它与
==
运算符一起工作)。

每当使用“==”时,您都在执行对象引用检查。这意味着,第一次检查将失败,因为它们是两个不同的对象

在第二种情况下,它是直截了当的


在第三种情况下,编译器自动装箱“i2”。因此,比较工作正常。

请记住,您不是在比较
2个原语,而是在比较2个对象。
。因此,请使用
.equals()
方法。

当使用
=
比较对象的引用时,仅当两个引用都指向同一个对象时,才会返回true

在第一种情况下,您有两个不同的对象

在第二种情况下,您不是在比较对象,而是在比较基元类型

在第三种情况下,
Integer
对象被解除绑定到其要与原语值进行比较的原语
int
值,因此比较两个原语值


除了枚举之外,不应使用
==
来比较对象。如果要比较两个对象,请始终在第一个中使用
.equals()

。结果=false 第二步-比较两个整数值。结果为真 在therd中,比较int和Integer,取消装箱后有两个int.Result-true。
对于Integer use equals。

第一种情况,JVM检查i1和i2是否是相同的引用。因为它们不同,所以结果为false

第二种情况没有问题,因为两者都是基本数据类型,并且具有相同的值,所以这是正确的

在第三种情况下,i2首先自动取消装箱,然后进行比较,因此结果为true。

对于自动广播,
(int)i1==(int)i2
将返回true,因此
(i1==i4)
正如其他注释所解释的,
=
仅比较对象(引用通过值传递)

另一种“安全”的替代方法是使用模运算

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

但是==?…在布尔运算中,我们像isClicked==true一样检查它是否正确?布尔运算是基本的,而不是对象,布尔运算是一个对象。基本的如
boolean
int
等使用
=
,所以如果你有一个名为
isClicked
布尔运算,你就可以正确地使用
isClicked==true
.i1和i2是两个不同的对象。如果将它们与==进行比较,则会返回false,因为它是在比较两个不同的对象。如果使用equals,则会比较这两个对象的值。如果isClicked是布尔值,则将其与另一个布尔值进行比较是没有意义的。只需使用
如果(isClicked)
。可能重复的
 if ( ( i3%i4)==0) System.out.println("true");