为什么Java的BigInteger有TEN和ONE作为常量? 任何实际用途?

为什么BigInteger类具有常量TEN和ONE? 将它们作为常量的任何实际用途? 我可以理解一些ZERO的用例。

比方说,你已经写了一个函数,经过一些计算和数据库操作后返回BigInteger 。 您经常可能需要返回null,0,1这样的值。很容易返回BigInteger.ZERO 。 这个值是公开的,因为它们通常是需要的。

 public BigInteger findMyLovelyBigInteger(Integer secretNumber) { if (secretNumber == null) { return BigInteger.ZERO; // better than BigInteger.valueOf(0); } else { // some db operations } } 

BigInteger.TEN通常用于功率/分频/模运算。

签出BigInteger公共方法。 您将很容易看到他们的常见用例。

一个可能是math中最基本的数字(旁边是零)。 似乎应该得到自己独有的恒定。 实际上,在许多algorithm中,这是一个有用的数字。

在BigInteger上下文中是重要的,因为它是十进制数系统的基础。 这很重要,因为几个BigInteger函数需要一个基数(例如BigInteger.toString(int radix) ,因此它是一个非常有用的常量。

恕我直言,这是一个devise决定,因为1和10被用在Java API代码库的其他部分。 创buildBig *是一个昂贵的操作,并且使用常量避免创build新对象(无论如何,Big *都是不可变的),代码更具可读性。

可能其他常量不是API的其余部分所需要的。

让他们公开可能是一个错误。 (Java API充满了“坏”的devise决策)

我其实不知道,但也许:

  • 零: 添加标识
  • 一: 乘法身份
  • 十:十进制的基数

也许他们只是在内部使用这些常量? (我没有检查源代码,但它是开源的)。

编辑:

例如:

看了代码后,我认为是因为他们在内部使用了ZERO和ONE。 考虑到以上原因,可能认为其他人也可能从这些常数中获益。 或者也可以在其他一些类中使用这些常量。

TEN已经在v1.5中join了,它似乎没有被内部使用,但也许被另一个类使用了?

http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/00cd9dc3c2b5/src/share/classes/java/math/BigInteger.java

10,0和1几乎可以回答所有的事情。 例如,如果你想到达42,你可以做(​​10 + 10 + 10 + 10 + 1 + 1):)