java Integer.MAX_VALUE,MIN_VALUE溢出

时间:2012-09-08 18:52:16

标签: java integer max min

好吧也许我只是累了因为这个但我怎么能做到这一点?

int x = Integer.MAX_VALUE+10;

//或者

int x = Integer.MIN_VALUE-20;

我只想要if语句来捕获x是否在“范围内”有点像这样:

if(x >= Intefer.MAX_VALUE || x <= Integer.MIN_VALUE){ //throw exception}

但问题是,如果值如上所述,如MAX_VALUE + 10,则该值最终既不高于MAX VALUE也不低于MIN_VALUE并且不满足if条件... < / p>

编辑:澄清我的意思: 我不想实际存储任何大于最大/最小值的值。 想象一下:

一个字段,你写10 + 10,它说“好吧,那是20” 接下来,有人可能会写1000000 * 100000,它也会回答答案 但是有人可能会写出一些超过最大/最小值的东西,例如10000000 * 1000000 * 1000000或类似的东西,然后程序应该都像是“撑起来,那太高了!这里的”0“对你而言”

4 个答案:

答案 0 :(得分:6)

这可以通过两种方式解决:

第一种方式:

if(x + 10 <= x){ //Has wrapped arround so throw exception}

第二种方式(更好):

long x = Integer.MAX_VALUE+10L;
现在条件正常工作

if(x >= Integer.MAX_VALUE){ //throw exception}

答案 1 :(得分:5)

如果您需要表示大于或小于限制的整数,请使用long代替int个变量。另一方面,如果您真的担心包含大于int的值的Integer.MAX_VALUE变量,那么请不要担心 - 这样的事情不可能存在。当值存储在int中时,任何溢出或下溢都已发生。

答案 2 :(得分:1)

以前提供的所有解决方案的问题在于,他们都建议将广播投射到尺寸较大的图元来执行计算(例如使用long代替int)。< / p>

这种方法有点沉重,当你已经使用了最大的原语时就会失败。相反,您可以在执行操作之前检查操作(例如加法或减法)是否会溢出。

这是来自The CERT Oracle Secure Coding Standard for Java的函数,它还为其他数学运算符提供等效函数,例如减法。

static final int safeAdd(int left, int right) throws ArithmeticException {
  if (right > 0 ? left > Integer.MAX_VALUE - right
                : left < Integer.MIN_VALUE - right) {
    throw new ArithmeticException("Integer overflow");
  }
  return left + right;
}

答案 3 :(得分:0)

Integer.MAX_VALUEMIN_VALUE是带有int的最大/最小值可表示。这就是重点:您不能拥有价值更低或更高的int

如果您希望持有并测试较小或较大的值,则需要使用long

当您尝试添加到例如Integer.MAX_VALUE并将结果保存在int中,变量将overflow,结果将保持在MAX_VALUEMIN_VALUE之间的值。