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 的最小值滚动到最大值。

对于非整数数据类型,上溢和下溢会导致无穷大值和零值。


相关文章