Java整数在比较两个整数时返回奇怪的结果?
在上面的代码中,如果else打印false,为什么?但是当第二个返回true,第三个也有true时。我认为包装类(比如double、boolean、char)不能比较true? 首先,如果其他打印错误。为什么?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
=
检查两个引用是否引用了相同的对象,在这种情况下,它们不是这样的=
检查为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,因为您正在将一个基元类型(inti3
)与该基元类型的包装类(Integeri2
)进行比较,所以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");