比较2个整数,奇怪的行为

时间:2014-12-18 09:21:03

标签: java

我写了简单的代码:

public static void main(String[] args) {
    Integer i1 = 127;
    Integer i2 = 127;
    boolean flag1 = i1 == i2;
    System.out.println(flag1);

    Integer i3 = 128;
    Integer i4 = 128;
    boolean flag2 = i3 == i4;
    System.out.println(flag2);
}

但奇怪的是,结果如下:

true
false

你能解释为什么会出现这种差异吗?

1 个答案:

答案 0 :(得分:7)

Integers对象==运算符可能“工作”(就您期望它做的那样 - 比较)仅适用于[-128,127]之间的数字。看看JLS - 5.1.7. Boxing Conversion

  

如果框中的值p为truefalsebytechar,   范围\ u0000到\ u007f,或 -128 127 之间的intshort个数字   (包括),然后让r1r2成为任意两个拳击的结果   p的转化。始终是r1 == r2

的情况

您要比较的值不在范围内,结果将评估为false。您应该使用Integer#equals,或者只使用可爱的原语int