比较两个整数,出现奇怪的行为

3

我写了一个简单的代码:

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

你们能否解释一下为什么会出现这种差异?


将 "Integer" 改为 "int",以便结果保持不变。 - Phat H. VU
或者在i3 == i4的位置上使用i3.equals(i4) - davmac
更多详情请访问 http://vanillajava.blogspot.co.uk/2012/01/surprising-results-of-autoboxing.html - Peter Lawrey
简单来说,你不应该使用“==”运算符来比较对象。 - MihaiC
1个回答

7
Integer是对象,==运算符仅用于比较[-128,127]之间的数字时才能按照您期望的方式(即比较值)。请参考JLS - 5.1.7.装箱转换

如果要装箱的值p为truefalse、在\u0000到\u007f范围内的bytechar,或者是-128127(包括两端)之间的intshort数字,则让p进行任意两个装箱转换的结果分别为r1r2。总是有r1 == r2

由于您要比较的值不在此范围内,所以结果被计算为false。您应该使用Integer#equals,或者直接使用可爱的原始类型int

1
他也可以使用 int 来使其正常工作。 - Icy Creature

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接