我写了简单的代码:
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
你能解释为什么会出现这种差异吗?
答案 0 :(得分:7)
Integer
s是对象,==
运算符可能“工作”(就您期望它做的那样 - 比较值)仅适用于[-128,127]之间的数字。看看JLS - 5.1.7. Boxing Conversion:
如果框中的值p为
的情况true
,false
,byte
或char
, 范围\ u0000到\ u007f,或 -128 和 127 之间的int
或short
个数字 (包括),然后让r1
和r2
成为任意两个拳击的结果p
的转化。始终是r1 == r2
。
您要比较的值不在范围内,结果将评估为false
。您应该使用Integer#equals
,或者只使用可爱的原语int
。