当前位置: 首页 > 知识库问答 >
问题:

如何在整数溢出上导致异常?[副本]

羊舌源
2023-03-14

如果我除以零,就会得到一个java.lang.AlithmeticException,如下例所示:

int a = 3/0;
public static void main(String[] args) {
    int a = Integer.MAX_VALUE + 1;
    System.out.println( a );
}

除了修改JVM的源代码和使用这样修改过的JVM之外。有什么办法能解决这个问题吗?即使修改JVM的源代码也是不够的,因为库可能依赖于这种行为,我不希望它们受到这种行为的影响,只希望我的代码受到影响。

共有1个答案

乐正翰
2023-03-14

我很抱歉这么说,但你不能。

唯一的解决方案是编写自己的函数或使用math#addexact,正如您所说的那样。

 类似资料:
  • 问题内容: 我知道有人多次问过这个话题,但是 我的问题是关于完整32位int的溢出 。例如: 我发现话题与这个类似的问题,但该算法是不完美的。 有没有简单,快速,安全的方法来检查此内容? 问题答案: 从Java 8开始,该类中提供了一组方法: …以及很长的版本。 如果发生溢出,这些方法中的每一个都会引发。否则,如果它在该范围内,它们将返回正确的结果。 添加示例: 看到此代码在IdeOne.com上

  • 可能重复: 如何检查在Java中相乘两个数字是否会导致溢出? 假设我有一个Java类方法,它使用和操作。 如何确保中没有发生溢出? 我想我可以使用BigDecimal,也可以用“包装器”替换all and*,比如: 有没有更好的方法来确保Java方法中不会发生int溢出?

  • 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出。整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代码执行。在这篇文章中,我将仅谈论整数溢出导致堆栈溢出,整数溢出导致堆溢出将在后面的单独的帖子中讨论。 数据类型大小及范围: 当我们试图存储一个大于最大支持值的值时,我们的值会被包装 。例如,当我们尝试将存储到带

  • 我正在连载: 和反序列化:

  • 问题内容: 当整数溢出发生而不是静默失败时,是否可能引发某种运行时异常。例如 由于溢出而打印,我想得到某种运行时异常 问题答案: 是的,从Java-8开始,您可以使用新的Exact方法,它将在溢出时引发异常(java.lang.ArithmeticException:整数溢出)。例如