我无法弄清楚为什么输出不同 输出仅在-128到127范围内相同。
public class Check {
public static void main(String[ ] args) {
Integer i1=122;
Integer i2=122;
if(i1==i2)
System.out.println("Both are same");
if(i1.equals(i2))
System.out.println("Both are meaningful same");
}
}
输出:
两者都相同
两者都是有意义的相同
public class Check {
public static void main(String[] args) {
Integer i1=1000;
Integer i2=1000;
if(i1==i2)
System.out.println("Both are same");
if(i1.equals(i2))
System.out.println("Both are meaningful same");
}
}
输出: 两者都是有意义的相同
答案 0 :(得分:4)
您在Java语言中遇到过警告,其中“小”值的自动装箱规则与自动装箱略有不同。 (在这种情况下,“小”表示127到-128范围内的数字,与C中签名的byte
一样。)来自JLS 5.1.7 Boxing Conversion:
如果被装箱的值p为真,假,一个字节,范围为\ u0000到\ u007f的字符,或者介于-128和127之间的整数或短数,则让r1和r2为任意结果p的两次拳击转换。 始终是r1 == r2。
的情况
(重点是我的。)
在第二个示例(i1=i2=1000
)中,if(i1==i2)
比较结果为false
,因为两个对象的值都大于127.在这种情况下==
是参照比较,即检查对象是否实际上是同一个对象。