Java中的整数类

时间:2014-11-14 17:17:07

标签: java class integer

我无法弄清楚为什么输出不同 输出仅在-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");
    }
}

输出:     两者都是有意义的相同

1 个答案:

答案 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.在这种情况下==参照比较,即检查对象是否实际上是同一个对象。