使用==运算符进行参考比较

时间:2015-04-26 07:11:52

标签: java scjp

public class AutoBoxingAndUnBoxing 
{
    public static void main(String[] args) 
    {
        Integer x = 127;
        Integer y = 127;
        System.out.println(x == y);//true

        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);//false
        System.out.println(a); // prints 128
    }
}

为什么x==y为真且a==b为假?如果它基于值(Integer -128 To 127),那么'a'应该打印-128吗?

1 个答案:

答案 0 :(得分:2)

比较Integer个对象时,==运算符可能仅适用于[-128,127]之间的数字。看看JLS

  

如果框中的值p为true,false,则为字节或字符   范围\ u0000到\ u007f,或介于-128和127之间的int或短数字   (包括),然后让r1和r2成为任意两个拳击的结果   转换p。始终是r1 == r2。

的情况

由于您所比较的值不在上述范围内,因此除非您使用Integer#equals,否则结果将评估为false