迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

在 Java 中处理整数上溢和下溢

作者:迹忆客 最近更新:2023/07/06 浏览次数:

本文介绍整数数据类型的上溢和下溢以及该问题的处理。


Java 中整数上溢和下溢概述

如果您使用整数值,则可能会遇到上溢或下溢错误。 当我们错误地声明变量时,就会发生这种情况,例如分配的值超出了声明的数据类型的范围。

众所周知,整数数据类型有四个级别,包含不同的大小,如下所示:

数据类型 大小
byte 8-bits
short 16-bits
int 32-bits
long 64-bits

如果我们考虑 Java 中的 int,它有一个我们可以分配的值范围。 我们已经知道,int 数据类型的大小是 32 位; 因此,int 可接受的值范围在 -21474836482147483647 之间。

可以使用 Integer.MAX_VALUEInteger.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

因此,我们需要增加数据类型的范围来解决上溢或下溢问题。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

理解 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 中的纸牌洗牌

发布时间: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 都用于存储数据,但由于实现类型的不同而存在一些差异。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便