如何检查Java中的整数溢出?

Wou*_*ris 3 java double int casting integer-overflow

整数a=200000;

双 b = (双) (a*a);

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

我不明白的是我如何能够从我的头脑中计算出这个。如何查看某个值是否不适合 int 变量?

有没有一种方法可以不使用方法,仅使用纯代码和常识来做到这一点?;-)

此致,

沃特

Jus*_*tin 5

两种可能的解决方案。

\n

捕获调用Math.\xe2\x80\xa6Exact方法后抛出的异常:Math.multiplyExact, Math.addExact,Math.decrementExact等。

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

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

\n
 long test = (long)a*(long)a;\n if (test > Integer.MAX_VALUE || test < Integer.MIN_VALUE)\n    // Overflow!\n
Run Code Online (Sandbox Code Playgroud)\n