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

时间:2018-11-09 20:47:29

标签: java casting int double integer-overflow

int a = 200000;

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

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

我不明白的是我该如何计算。如何查看一个值是否不适合int变量?

是否有一种方法可以不使用方法,而只需使用普通代码和常识? ;-)

最诚挚的问候,

Wouter

2 个答案:

答案 0 :(得分:2)

可能的解决方案:

 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!

答案 1 :(得分:1)

您可以使用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

的最大值