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