javamath.incrementExact(inta)用途
为什么会存在?两者的区别是什么javamath.incrementExact(inta)用途,java,Java,为什么会存在?两者的区别是什么 int a = 5; Math.incrementExact(a); 及 它的作用是什么?它提供了一种在int和long原语上执行算术时检查溢出的快速方法。在许多应用程序中,必须小心处理溢出。JavaDoc声明: 返回递增1的参数,如果结果溢出int,则引发异常 从数学角度来看,2147483647+1=2147483648。但是在Java中,2147483647+1=-2147483648。从算术上讲,这是没有意义的 为什么不把它留给程序员呢? 如果没有此方法
int a = 5;
Math.incrementExact(a);
及
它的作用是什么?它提供了一种在
int
和long
原语上执行算术时检查溢出的快速方法。在许多应用程序中,必须小心处理溢出。JavaDoc声明:
返回递增1的参数,如果结果溢出int,则引发异常
从数学角度来看,2147483647+1=2147483648
。但是在Java中,2147483647+1=-2147483648
。从算术上讲,这是没有意义的
为什么不把它留给程序员呢?
如果没有此方法(它是DecrementAct()
对应的方法),则必须将类似于以下内容的代码添加到程序中:
if (a == Integer.MAX_VALUE) {
throw new ArithmeticException("integer overflow");
} else {
a ++;
}
术语“精确”是什么意思?数学包使用“精确”表示溢出发生时引发了一个
算术异常。另一方面,Math
使用“不精确”来描述类似于toRadians()
或toDegrees()
的方法,因为它们产生近似的结果,例如乘以PI=3.141592653589793
它是用来处理溢出情况的
对于int
,最大int值为2147483647
请考虑这个
int a = 2147483647;
a+=1;
System.out.println(a);
打印出来
-2147483648
何处为
a = 2147483647;
a = Math.incrementExact(a);
System.out.println(a);
引发以下异常:
Exception in thread "main" java.lang.ArithmeticException: integer overflow
编辑:
刚才看到的另一个答案是相同的。我会回答你的评论
确切的原因可以追溯到上面。它基本上是说返回的值保证是一个以上的值。与原始情况相比,该值实际上是一个负数,而不是1
更多。此外,如果您注意到,该方法只处理int
和long
。这是因为它们的精度是精确的
,假设是双精度的
s,但不精确。这是有道理的。“精确”在其名称中的含义是什么?@MarcB我更新了我的答案,以解决“精确”的含义
Exception in thread "main" java.lang.ArithmeticException: integer overflow