59

为什么 BigInteger 类有常量 10 和 1?将它们作为常量有什么实际用途?我可以理解零的一些用例。

4

5 回答 5

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公共方法。您将很容易看到它们的常见用例。

于 2013-07-09T09:44:17.357 回答
21

可能是数学中最基本的数字(除了零)。仅凭这一点似乎就值得拥有自己的常数。实际上,在许多算法中它是一个有用的数字。

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

于 2013-07-09T09:09:44.410 回答
11

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

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

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

于 2013-07-09T10:18:40.070 回答
5

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

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

编辑:

例如:

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

TEN 在 v1.5 中增加了 内部好像没有使用,可能是被别的类使用了?

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

于 2013-07-09T09:10:52.953 回答
-2

10、0 和 1 几乎可以回答所有问题。例如,如果您想达到 42 岁,您可以执行 (10 + 10 + 10 + 10 + 1 + 1) :)

于 2013-07-09T09:29:01.380 回答