我得到真实和虚假输出为什么?

时间:2015-07-02 11:41:29

标签: java object integer primitive

我知道int范围-2147483648+2147483647,但我在这里得到truefalse的输出。为什么?实际上i1i2指向同一个对象,因此输出为true。我可以理解,但i3i4也指向同一个对象,但输出为false。为什么呢?

public class MainClass {
    public static void main(String[] args) {
        Integer i1 = 127;
        Integer i2 = 127;
        System.out.println(i1 == i2);
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i3 == i4);
    }
}

输出

true

false

为什么输出应该是这样的?

2 个答案:

答案 0 :(得分:2)

因为您使用的是Integer对象。对于Integer对象,-128 to 127之间的值合并

答案 1 :(得分:0)

问题在于==equals之间的区别。 ==只是测试两个Integer变量是否指向相同的对象,可以是truefalse,具体取决于你的JVM。 equals实际上会测试它们是否具有相同的。因此,在这种情况下,您需要使用equals

// ...
System.out.println(i1.equals(i2));
// ...
System.out.println(i3.equals(i4));