在 Java 中处理整数上溢和下溢
本文介绍整数数据类型的上溢和下溢以及该问题的处理。
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 overflow
at 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 type
for(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 intentionally
System.out.println(value-1);
}
}
现在,当您执行上述程序时,控制台将显示以下输出:
/IntegerUnderflow.java:3: error: integer number too large
int value = -2147483699; // Creating underflow intentionally
^
1 error
处理整数下溢
为了解决上述错误,我们需要再次增加值的范围,为此,我们可以将整数值类型转换到下一个级别。 看看下面分享的代码。
示例代码:
public class IntegerUnderflow {
public static void main(String[] args) {
long value = (long)-2147483638; // Type Casting
System.out.println(value-1);
}
}
现在您将在控制台中看到以下输出。
-2147483639
因此,我们需要增加数据类型的范围来解决上溢或下溢问题。
相关文章
理解 Java 中的 java.lang.reflect.InvocationTargetException 错误
发布时间:2023/07/10 浏览次数:197 分类:Java
-
在本文中,我们将了解 Java 中的 java.lang.reflect.InitationTargetException。Java 中的 java.lang.reflect.InitationTargetException 错误 当开发人员使用 Java Reflection API 时,java.lang.reflect.InitationTargetException 是一个非
Java 中 ExceptionInInitializer 错误
发布时间:2023/07/10 浏览次数:121 分类:Java
-
在这篇文章中,我们将了解Java中的 ExceptionInInitializerError。Java中 ExceptionInInitializerError 简介 ExceptionInInitializerError 是 Java 中的未经检查的异常,它是 Error 类的子类。 它属于运行时异常的类别。
Java 中 GC Overhead Limit Exceeded 错误
发布时间:2023/07/10 浏览次数:127 分类:Java
-
本文将讨论 Java 中的 GC 开销超出限制错误。Java中GC Overhead Limit Exceeded错误简介 在Java中,当程序不再使用对象时,JVM(Java虚拟机)会释放内存。
从 Java 代码调用 Python 脚本
发布时间:2023/06/28 浏览次数:107 分类:Python
-
本篇文章介绍了从 Java 代码调用 Python 脚本的三种不同方法。从 Java 代码调用 Python 脚本 有时,我们必须从Java代码中调用Python脚本来满足项目需求。
使用 Jython 在 Java 中运行 Python
发布时间:2023/06/18 浏览次数:124 分类:Python
-
本文将彻底解释使用 Jython 库在 Java 程序中运行 Python 的步骤。 这将是一个包含大量图像的详细分步过程,因此您不必担心“他是怎么做到的”。
从 Java 代码调用外部 JavaScript 函数
发布时间:2023/06/03 浏览次数:154 分类:JavaScript
-
在本文中,我们将学习如何在 Java 程序中包含 JavaScript 源代码并从 Java 代码调用 JavaScript 函数。
Java 中的纸牌洗牌
发布时间:2023/05/16 浏览次数:73 分类:Java
-
本文介绍如何在 Java 中洗一副牌。使用 Java 中的传统循环打乱 ArrayList。类似地,在 Java 中,各种方法允许用户随机播放元素。下面是演示此过程的代码块。
Java 中将列表转换为 ArrayList
发布时间:2023/05/16 浏览次数:156 分类:Java
-
在 Java 中将 List 转换为 ArrayList 的方法。在本篇文章中,我们讨论了如何在 Java 中将列表转换为 ArrayList。
Java 中 ArrayList 和 LinkedList 的区别
发布时间:2023/05/16 浏览次数:126 分类:Java
-
本文介绍 Java 中 ArrayList 和 LinkedList 的区别。ArrayList 和 LinkedList 都用于存储数据,但由于实现类型的不同而存在一些差异。