2014-10-03 98 views
7

在Java中,要将字符串转换为BigInteger,您可以使用构造函数new BigInteger(String),但要将int/long转换为使用工厂函数BigInteger.valueof(long),为什么?为什么BigInteger(String)没有BigInteger(long)?

+2

这就是他们在建造时的设计方式。你将不得不问谁创造BigInteger这个问题。 – brso05 2014-10-03 20:25:31

+0

通常情况下,实现缓存常见值,例如接近0的正整数。 – 2014-10-03 20:27:50

+0

@JakeCobb - 确切地说 - 在这种情况下,它缓存的值介于-16和16之间。 – Krease 2014-10-03 21:10:56

回答

11

其中 a BigInteger(long)构造函数,但它是私有的。在工厂方法的Javadoc提供的信息的原因:

此“静态工厂方法”优先提供给(长) 构造,因为它允许常用 BigIntegers的重用。

20

@Morad你可以找到在文档答案:JavaDoc of BigInteger.valueOf(long)

此“静态工厂方法”被优先提供给(长) 构造,因为它允许常用 BigIntegers的重用。

解释BigInteger.valueOf(long)做,你会从BigInteger(long)构造期望到底是什么,它是(或应该是)更有效率。