我写了简单的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,奇怪的是,结果如下:
true
false
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么会出现这种差异吗?
Integers是对象,==操作员可能只在[-128,127]之间的数字"工作"(在你预期的意义上 - 比较值).看看JLS - 5.1.7.拳击转换:
如果被装箱值p是
true,false,一个byte,或一个char在范围\ u0000的到\ u007f,或int或short数之间-128和127 (含),然后让r1和r2是任何两个装箱转换的结果p.情况总是如此r1 == r2.
您要比较的值不在范围内,结果将被评估为false.你应该使用Integer#equals,或者只是使用可爱的原语int.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |