【发布时间】:2016-08-07 09:43:32
【问题描述】:
如果我除以零,我会得到一个 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 的源代码也不够,因为库可能依赖于这种行为,我不希望它们受此影响,只有我的代码。
【问题讨论】: