Java 溢出和下溢
溢出
当我们为变量分配一个超过最大允许值的数值时,就会发生溢出。
下溢
当我们为变量分配一个低于最小允许值的数值时,就会发生下溢。
JVM 在发生溢出或下溢时不会抛出任何异常,它只是简单地更改值。程序员有责任检查溢出/下溢条件的可能性并相应地采取措施。
示例(溢出)
考虑 int 变量的情况,它是 32 位的,任何超过 Integer.MAX_VALUE (2147483647) 的值都会回绕。例如,Integer.MAX_VALUE + 1 返回 -2147483648 (Integer.MIN_VALUE)。
由于 int 数据类型在 Java 中是 32 位的,因此任何超过 32 位的值都会回绕。从数值上讲,这意味着在 Integer.MAX_VALUE (2147483647) 上递增 1 后,返回的值将是 -2147483648。事实上,您不需要记住这些值,可以使用常量 Integer.MIN_VALUE 和 Integer.MAX_VALUE。
int 的下溢
下溢与溢出相反。在溢出的情况下,我们达到上限,而在下溢的情况下,我们达到下限。因此,在从 Integer.MIN_VALUE 减去 1 后,我们到达 Integer.MAX_VALUE。在这里,我们从 int 的最小值回绕到最大值。
对于非整数类型的数据类型,溢出和下溢会导致 INFINITY 和 ZERO 值。
广告