2008-11-06 70 views

回答

35

BigDecimal.ZERO是一個預定義的常量,因此不需要在運行時從字符串求值,因爲BigDecimal("0")會是。它會更快,並且不需要創建新的對象。

如果您的代碼需要在1.5之前運行,那麼您可以使用(非常惡意的)Singleton模式創建一個相當於BigDecimal.ZERO的對象。第一次使用它時,它會調用BigDecimal("0")創建一個零對象,並在隨後的調用中返回該對象。否則,如果您的代碼在1.5系統上運行,那麼您的單例對象可以返回BigDecimal.ZERO而不會造成運行時損失。

+0

我會刪除「基本」一詞 - 它是一個預定義的常量。 – 2008-11-06 18:21:32

+0

好的電話,謝謝。 – 2008-11-06 18:22:55

+1

新的BigDecimal(「0」)每次創建一個新的對象實例,但BigDecimal.ZERO不創建新的實例。 – 2008-11-06 19:35:24

13

使用ZERO不會創建新對象或需要任何解析。絕對要走的路。

3

出於好奇我檢查了BigDecimal的構造函數,它沒有對「0」字符串進行任何優化。所以肯定是的,有一個區別。

4

在談論運行時懲罰之前,請確保這段代碼很重要。設置分析並測量完整的用例。

儘管如此,喜歡Bigdecimal.ZERO,因爲它是在編譯期進行檢查,而你可以小心輸入new BigDecimal("9"),該編譯器會接受,但是這將導致錯誤到應用程序中。

相關問題