Java的整数可以表示从-21474836482147483647之间的值。为什么把这两个数当成上下界?可以回忆一下之前我们说到int类型占32 bit,如果使用1 bit表示正负号的话,剩余的31 bit的最大值就是这个数。0被视为正数的话,int类型表示的正数和负数数目恰好相等。

尝试使用System.out.println()输出以下算式的值。

Integer.MIN_VALUE
Integer.MAX_VALUE
Integer.MIN_VALUE - 1
Integer.MAX_VALUE + 1

最后两个算式会有什么输出?结果让你感到意外么?将所能表达的整数最小值减一又会回到整数最大值,这被称为下界溢出(underflow)。同样的,将整数最大值加一会得到整数最小值,这被称为上界溢出(overflow)。这和汽车的里程表或者家里的水表非常类似。

在何时会用到Integer.MAX_VALUEInteger.MIN_VALUE?一个常见的例子就是将变量初始化为整数最小值(当然直接赋值为第一个数也没有问题),然后利用它作为临时存储空间,寻找一系列数中较大的一个,直至找到最大值。有时人们会错误的把变量初始化为零,这样当最大值为负数时将得不到正确的结果。


陈 欣

AADPS创始人

发表评论