java Integer.MAX\u值、MIN\u值溢出

java Integer.MAX\u值、MIN\u值溢出,java,integer,max,min,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} if(x>=Intefer.MAX_VALUE | | x如果您需要表示大于或小于极限的整数,

好吧,也许我只是因为这件事而累了,但我怎样才能做到这一点呢

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}

if(x>=Intefer.MAX_VALUE | | x如果您需要表示大于或小于极限的整数,那么使用
long
而不是
int
变量。另一方面,如果您确实担心
int
变量包含大于
Integer.MAX_VALUE
的值,那么停止担心——这样的问题事物不可能存在。当值存储在
int
中时,任何溢出或下溢都已经发生。

Integer。MAX\u value
MIN\u value
是可以用
int
表示的最大/最小值。这就是问题所在:你不能用较小或较大的
来表示
int
er值

如果要保留并测试较小或较大的值,则需要使用
long


当您尝试添加到例如
Integer.MAX\u VALUE
并将结果保存在
int
中时,变量将被删除,并且结果将保持在
MAX\u VALUE
MIN\u VALUE
之间的某个值。这可以通过两种方式解决:

第一种方式:


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

前面提供的所有解决方案的问题是,它们都建议向上转换到一个较大的原语来执行计算(例如使用
long
而不是
int

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

这是来自的函数,它还为其他数学运算符(如减法)提供了等效函数

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;
}
static final int safeAdd(int left,int right)抛出算术异常{
如果(右>0?左>Integer.MAX_值-右
:左
long x=Integer.MAX_VALUE+10;
也会溢出,因为加法是在类型
int
上执行的。使用
10L
或强制转换在类型
long
上进行加法。丹尼尔提示:很好!更新的答案这是