本文介绍整数数据类型的上溢和下溢以及该问题的处理。
Java 中整数上溢和下溢概述
如果您使用整数值,则可能会遇到上溢或下溢错误。 当我们错误地声明变量时,就会发生这种情况,例如分配的值超出了声明的数据类型的范围。
众所周知,整数数据类型有四个级别,包含不同的大小,如下所示:
数据类型 | 大小 |
---|---|
byte | 8-bits |
short | 16-bits |
int | 32-bits |
long | 64-bits |
如果我们考虑 Java 中的 int,它有一个我们可以分配的值范围。 我们已经知道,int 数据类型的大小是 32 位; 因此,int 可接受的值范围在 -2147483648 到 2147483647 之间。
可以使用 Integer.MAX_VALUE
和 Integer.MIN_VALUE
快速获取最大值和最小值。
Java 中的整数溢出
在这里,我们将看到整数溢出的发生及其处理。
发生整数溢出
示例代码:
public class IntegerOverflow {public static void main(String[] args) {int Intvalue = Integer.MAX_VALUE-1;for(int i = 0; i < 4; i++) {System.out.println(Intvalue);Intvalue = Math.addExact(Intvalue, 1);}}
}
现在,当您执行上述程序时,控制台将显示以下输出:
2147483646
2147483647
Exception in thread "main" java.lang.ArithmeticException: integer overflowat java.base/java.lang.Math.addExact(Math.java:828)at IntegerOverflow.main(IntegerOverflow.java:9)
处理整数溢出
我们需要增加值范围来解决上面的示例。 在我们的例子中,我们将整数类型转换为 long。 我们对上述示例的更新代码如下。
示例代码:
public class IntegerOverflow {public static void main(String[] args) {int Intvalue = Integer.MAX_VALUE-1;long NewValue = (long)Intvalue; // Upgrading to new typefor(int i = 0; i < 4; i++) {System.out.println(NewValue);NewValue = Math.addExact(NewValue, 1);}}
}
现在您将在控制台中看到以下输出。
2147483646
2147483647
2147483648
2147483649
Java 中的整数下溢
在本节中,我们将了解 Java 中的整数下溢以及如何处理它。
发生整数下溢
示例代码:
public class IntegerUnderflow {public static void main(String[] args) {int value = -2147483699; // Creating underflow intentionallySystem.out.println(value-1);}
}
现在,当您执行上述程序时,控制台将显示以下输出:
/IntegerUnderflow.java:3: error: integer number too largeint value = -2147483699; // Creating underflow intentionally^
1 error
处理整数下溢
为了解决上述错误,我们需要再次增加值的范围,为此,我们可以将整数值类型转换到下一个级别。 看看下面分享的代码。
示例代码:
public class IntegerUnderflow {public static void main(String[] args) {long value = (long)-2147483638; // Type CastingSystem.out.println(value-1);}
}
现在您将在控制台中看到以下输出。
-2147483639
因此,我们需要增加数据类型的范围来解决上溢或下溢问题。