Java 溢出和下溢
java programming java8java technologies object oriented programming
溢出
当我们将某个值赋给一个变量,而该值大于允许的最大值时,就会发生溢出。
下溢
当我们将某个值赋给一个变量,而该值小于允许的最小值时,就会发生下溢。
如果发生溢出或下溢,JVM 不会抛出任何异常,它只会更改值。程序员的责任是检查溢出/下溢情况的可能性并采取相应的措施。
示例(溢出)
以 int 变量为例,它是 32 位的,任何大于 Integer.MAX_VALUE (2147483647) 的值都会被翻转。例如,Integer.MAX_VALUE + 1 返回 -2147483648 (Integer.MIN_VALUE)。
由于 Java 中的 int 数据类型是 32 位的,因此任何超过 32 位的值都会被翻转。用数值术语来说,这意味着在 Integer.MAX_VALUE (2147483647) 上加 1 后,返回的值将为 -2147483648。实际上,您无需记住这些值,可以使用常量 Integer.MIN_VALUE 和 Integer.MAX_VALUE。
int 的下溢
下溢与溢出相反。溢出时我们达到上限,而下溢时我们达到下限。因此,将 Integer.MIN_VALUE 减 1 后,我们得到 Integer.MAX_VALUE。这里,我们从 int 的最小值滚动到最大值。
对于非整数数据类型,上溢和下溢会导致无穷大值和零值。