int a=200000;
double b=(double((a*a(;
我希望能够计算(aa((整数(是否已经太大(stackOverflow(而无法容纳在变量中;在这种情况下,我知道乘以(aa(会导致一个不适合的int,->这个数字会错;
我不明白的是,我怎么能在脑海中计算出这一点。如何查看一个值是否不适合int变量??
有没有一种方法可以在不使用方法的情况下做到这一点,只使用简单的代码和常识?;-(
致问候,
Wouter
两种可能的解决方案。
在调用Math.…Exact
方法后引发的Catch异常:Math.multiplyExact
、Math.addExact
、Math.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