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

标签 java casting int double integer-overflow

int a = 200000;

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

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

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

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

最诚挚的问候,

沃特

最佳答案

两种可能的解决方案。

捕获调用 Math.…Exact 方法后抛出的异常: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
  }

或者,检查 minimum 的常量和 maximum可能的整数值。

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

关于java - 如何检查Java中的整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233054/

相关文章:

Java:使用 Scanner 和 PrintWriter 读取 int 值并将其写入文件

.net - 确保数字在 .NET 中正确转换

c++ - 为什么在 C++ 中没有指定复数?

java - 在不降低应用程序速度或崩溃的情况下将大尺寸照片放入小 ImageView 的问题

java - 有没有办法在 JAVAFX 上实现类似 "rendered"的属性?

java - 使用 log4j 将 json 对象写入文件

java - 如何将 16 位字符数组转换为 8 位字符数组并使用 JNA 发送到 C 代码?

c++ - 传递带有命名空间的 void 函数的转换错误

c++ - 将结构指针转换为双指针

java - 为什么这个 Java 表达式不将最终值转换为 long 类型?