2014-10-03 44 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)構造期望到底是什麼,它是(或應該是)更有效率。