如何在Java中检查整数溢出



int a=200000;

double b=(double((a*a(;

我希望能够计算(aa((整数(是否已经太大(stackOverflow(而无法容纳在变量中;在这种情况下,我知道乘以(aa(会导致一个不适合的int,->这个数字会错;

我不明白的是,我怎么能在脑海中计算出这一点。如何查看一个值是否不适合int变量??

有没有一种方法可以在不使用方法的情况下做到这一点,只使用简单的代码和常识?;-(

致问候,

Wouter

两种可能的解决方案。

在调用Math.…Exact方法后引发的Catch异常:Math.multiplyExactMath.addExactMath.decrementExact等等

int a = 200000;
try {
int result = Math.multiplyExact(x, y);
} catch(ArithmeticException e) {
//if you get here, it is too big
}

或者,对照常量检查可能的最小和最大整数值。

long test = (long)a*(long)a;
if (test > Integer.MAX_VALUE || test < Integer.MIN_VALUE)
// Overflow!

您可以使用Integer包装类中的常量MAX_VALUE,改为强制转换为long(如果强制转换为double但超出其范围,则会出现编译错误(

int a = 200000;
long b = (long) a * (long) a;
if (b > Integer.MAX_VALUE) {
// do something
}

MAX_VALUE对应整数的最高值,(2^31(-1

相关内容

  • 没有找到相关文章

最新更新