首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java Integer.MAX_VALUE,MIN_VALUE溢出

java Integer.MAX_VALUE,MIN_VALUE溢出
EN

Stack Overflow用户
提问于 2012-09-09 02:52:16
回答 4查看 29.5K关注 0票数 3

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

代码语言:javascript
复制
int x = Integer.MAX_VALUE+10;

//或者可能

代码语言:javascript
复制
int x = Integer.MIN_VALUE-20;

我只想让if语句捕捉到x是否在“范围内”,就像这样:

代码语言:javascript
复制
if(x >= Intefer.MAX_VALUE || x <= Integer.MIN_VALUE){ //throw exception}

但问题是,如果该值如上所述,如MAX_VALUE + 10,则该值最终既不高于最大值,也不低于MIN_VALUE,并且不满足if条件……

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

一个字段,你编写10+10,然后它会说“好吧,这是20”,下一步,有人可能会写1000000*100000,它也会返回答案,但然后有人可能会写一些超过最大/最小值的东西,比如,10000000*1000000*1000000或类似的东西,然后程序应该都像“等等,太高了!这里有一个"0”给你。“

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-09 03:00:30

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

第一种方法:

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

第二种方式(更好):

long x = Integer.MAX_VALUE+10L;

现在条件可以正常工作了

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

票数 7
EN

Stack Overflow用户

发布于 2012-09-09 02:54:30

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

票数 6
EN

Stack Overflow用户

发布于 2014-03-14 12:16:57

之前提供的所有解决方案的问题是,它们都建议向上转换为更大的基元来执行计算(例如使用long而不是int)。

这种方法有点笨手笨脚,当你已经在使用最大的原语时就会失败。相反,您可以在执行操作之前检查以查看加法或减法等操作是否会溢出。

下面是The CERT Oracle Secure Coding Standard for Java中的一个函数,它还为减法等其他数学运算符提供了等效函数。

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12333541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档