【问题标题】:i am getting true and false output why? [duplicate]我得到真假输出为什么? [复制]
【发布时间】:2015-07-02 11:41:29
【问题描述】:

我知道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

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

【问题讨论】:

标签: java object integer primitive


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2020-09-04
      • 2020-05-24
      • 2018-07-01
      相关资源
      最近更新 更多