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
上进行加法。丹尼尔提示:很好!更新的答案这是