由于无声整数溢出:
Integer.MIN_VALUEis
-2^31和
Integer.MAX_VALUEis
2^31-1,因此
-Integer.MIN_VALUEis
2^31,即is
Integer.MAX_VALUE +1,根据定义,它对于整数而言太大。因此它溢出并变成
Integer.MIN_VALUE…
您还可以检查:
System.out.println(Integer.MAX_VALUE + 1);
打印相同的东西。
从技术上讲,结果由Java语言规范#15.18.2定义:
如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。



