System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE);
是真的。
我知道Java中的整数是32位,并且不能超过2 31 -1,但是我不明白为什么要在其MAX_VALUE结果中加1 MIN_VALUE而不是某种例外。更不用说像Ruby这样的透明转换为更大的类型了。
MAX_VALUE
MIN_VALUE
是否在某处指定了此行为?我可以依靠吗?
因为整数溢出。溢出时,下一个值为Integer.MIN_VALUE。相关JLS
Integer.MIN_VALUE
如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。