BigInteger :: intValueExact() - 有什么意义?

ryv*_*age 8 java biginteger

我注意到该类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,则抛出异常.

  • @yshavit除了令人讨厌的小问题,这个数字是不可计算的,我们不知道BusyBeaver(9)的确切值,对于任何一个稍微不同的`BusyBeaver`定义.幸运的是,只需将字符串的13个代码单元解释为26字节整数就会产生远远超出`int`范围的整数.并且它仍然比这个答案中的数字大:-) (2认同)