9
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);//true

integer1 = 128;
integer2 = 128;
System.out.println(integer1 == integer2);//false

我发现它在 的范围内返回 == (如果是的话)-128 - 127,为什么会有这样的规范?

4

2 回答 2

28

由于以下代码Integer.valueOf(int)

public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high)
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}

解释:

Integer integer1 = 127是 的快捷方式Integer integer1 = Integer.valueOf(127),对于介于 -128 和 127(含)之间的值,整数被放入缓存中并多次返回,而更高和更低的数字每次都会生成新的整数。

于 2011-04-07T13:34:14.667 回答
3

==如果它是完全相同的对象,将返回 true。在该范围内的 Java“实习生”数字中装箱整数,因此此类数字的任何装箱版本都将产生完全相同的对象。

要在比较中避免这种影响,请使用 .equals()

System.out.println(integer1.equals(integer2));
于 2011-04-07T13:35:39.930 回答