一尘不染

为什么选择Integer.MAX_VALUE + 1 == Integer.MIN_VALUE?

java

System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE);

是真的。

我知道Java中的整数是32位,并且不能超过2 31 -1,但是我不明白为什么要在其MAX_VALUE结果中加1
MIN_VALUE而不是某种例外。更不用说像Ruby这样的透明转换为更大的类型了。

是否在某处指定了此行为?我可以依靠吗?


阅读 469

收藏
2020-09-08

共1个答案

一尘不染

因为整数溢出。溢出时,下一个值为Integer.MIN_VALUE相关JLS

如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。

2020-09-08