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

kit*_*ttu 5 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
    }
}
Run Code Online (Sandbox Code Playgroud)

怎么回事x==y是真的,a==b是假的?如果它是基于值(Integer -128 To 127)那么'a'应该打印-128正确吗?

Mar*_*oun 2

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

如果装箱的值 p 是 true、false、一个字节或一个在 \u0000 到 \u007f 范围内的字符,或者是 -128 到 127(含)之间的 int 或短数字,则令 r1 和 r2 为以下结果p 的任意两个拳击转换。r1 == r2 的情况总是如此。

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