java:class Integer == operator奇怪的行为

liv*_*hak 3 java eclipse

public class IntegerVsInt {

    public static void main(String args[])
    {
        int a = 1;
        int b = 1;
        int c = a + b;

        System.out.println(c);
        System.out.println(a == b);

        Integer x = 1;
        Integer y = 1;
        Integer z = x + y;

        System.out.println(z);
        System.out.println(x == y);
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我将比较两个int和两个integer类型的对象.

比较两个int时

a == b
Run Code Online (Sandbox Code Playgroud)

我希望他们的价值观能够进行比较.

但是当你比较两个Integer时

x == y
Run Code Online (Sandbox Code Playgroud)

我希望比较两个对象的地址,然后返回false.

我在两种情况下都是真的吗?为什么会这样?

Ste*_*rea 6

==正在测试整数是否是同一个对象.在java中,需要缓存某些小值,并且可以选择缓存其他值,这就是== Object引用求值为true的原因.

JLS Spec 5.1.7的片段

如果被装箱值p为真,假,字节,或在范围\ u0000的一个char到\ u007f,或int或-128和127(含)之间的短号码,然后让r1和r2是的结果p的任何两个拳击转换.始终是r1 == r2的情况.