2011-10-06 62 views
4

有一個PMD rule說如果有預定義的常量,應該避免實例化BigInteger或BigDecimal。爲什麼要避免Java中的biginteger實例化

BigInteger.ZERO 

// instead of 

new BigInteger(0) 

會有比保存幾個字節還有其他好處嗎?

+1

它的大約48個字節。但是,這取決於它被稱爲是否重要。如果性能至關重要,那麼BigInteger可能不是最佳解決方案。 –

回答

5

它避免了這幾個字節,並需要分配到收集他們回來以後

在緊密循環,可以不管

2

可能的表現,如果你實例化一個很大0的。長/ int參數的替代方法是

BigInteger.valueOf(0)

返回BigInteger.ZERO當參數爲0

1

而不是創建與new BigInteger一個新的對象,你最好使用它創建一次一個靜態對象當BigInteger類被加載時。使用所有包裝類型的valueOf也是如此。

+0

你的意思是'valueOf'使用那些常量嗎? – deamon

+0

@deamon是檢查http://www.docjar.com/docs/api/java/math/BigInteger.html#valueOf%28long%29在底部 –

+1

@deamon是的,'valueOf'使用最頻繁的池使用的值。例如,'BigInteger.valueOf'緩存從-16到16的33個值,因此當您爲這些值調用它時,您將始終爲一個值獲取相同的BitInteger對象。 'BigInteger.ZERO'只是'BigInteger.valueOf(0)'。 – tcb

1

通過使用緩存值,它可能會產生更好的空間和時間性能。