如何在整数溢出时引起异常?

时间:2016-08-07 09:43:32

标签: java exception

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

int a = 3/0;

我想这样做,整数溢出也会导致异常。因此,以下程序将抛出异​​常而不是打印-2147483648。

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

我知道我可以使用BigInteger,它不会溢出,只受可用内存的限制。

我知道我可以创建自己的add函数来检查溢出。或者我可以使用Java 8 Math.addExact

我意识到我要求的行为与JLS at 15.18.2

相反
  

如果整数加法溢出,则结果为低位   数学和的位用一些足够大的数字表示   二补码格式。如果发生溢出,则表示符号   结果与两者的数学和的符号不同   操作数值。

除了修改JVM的源代码并使用这样修改过的JVM之外。有没有办法来实现这个?甚至修改JVM的源代码也是不够的,因为库可能依赖于这种行为,我不希望它们受到这种行为的影响,只有我的代码。

1 个答案:

答案 0 :(得分:5)

我很遗憾地说,但你不能。

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