我注意到该类BigInteger在Java 8中收到了一个新方法:intValueExact().
我的问题是:为什么?
BigInteger bigInt = ... ;
bigInt.intValueExact();
Run Code Online (Sandbox Code Playgroud)
BigInteger已经有了intValue().本intValueExact()是为了抛出一个错误,当你BigInteger不成立的确切int价值,但我的问题是:这怎么可能给一个BigInteger不会等同于一个确切的数值int?有人能举例说明这种方法什么时候会抛出一个ArithmeticException?
rge*_*man 11
该intValue()方法仅保留适合的最低32位,int必要时丢弃信息.
将此BigInteger转换为int.这种转换类似于Java*语言规范5.1.3节中定义的从long到int的缩小原语转换:如果这个BigInteger太大而不适合int,则只返回低位32位.请注意,此转换可能会丢失有关BigInteger值的总体大小的信息,并返回具有相反符号的结果.
intValueExact()在这种情况下,该方法将抛出异常,而不是给您一个不同的值.
将此BigInteger转换为int,检查丢失的信息.如果此BigInteger的值超出int类型的范围,则抛出ArithmeticException.
use*_*ica 10
new BigInteger("10000000000000000000000000000000000000000000000").intValueExact()
Run Code Online (Sandbox Code Playgroud)
如果该BigInteger值太大而不适合int,则抛出异常.