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

时间:2013-07-09 09:04:16

标签: java

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

5 个答案:

答案 0 :(得分:51)

假设您编写了一个函数,在一些计算和数据库操作之后返回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公开方法。您将很容易看到它们的常见用例。

答案 1 :(得分:21)

一个可能是数学中最基本的数字(除零之外)。似乎在这一点上应该得到自己的常数。实际上,在许多算法中将其作为常量是一个有用的数字。

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

答案 2 :(得分:11)

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

其他API可能不需要其他常量。

将它们公之于众可能是一个错误。 (java API充满了“糟糕的”设计决策)

答案 3 :(得分:5)

我实际上不知道,但也许:

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

修改

E.g:

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

在v1.5中添加了TEN 它似乎没有在内部使用,但可能是由另一个类使用?

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

答案 4 :(得分:-2)

10,0和1几乎可以回答所有问题。例如,如果你想要到达42,你可以做一个(10 + 10 + 10 + 10 + 1 + 1):))