無論是用於比較還是初始化新變量,它都會影響您使用的這些變量中的哪一個?BigDecimal(「0」)和BigDecimal.ZERO之間有區別嗎?
我知道BigDecimal.ZERO是一個1.5的功能,所以這是一個問題,但假設我使用1.5它有什麼關係嗎?
謝謝。
無論是用於比較還是初始化新變量,它都會影響您使用的這些變量中的哪一個?BigDecimal(「0」)和BigDecimal.ZERO之間有區別嗎?
我知道BigDecimal.ZERO是一個1.5的功能,所以這是一個問題,但假設我使用1.5它有什麼關係嗎?
謝謝。
BigDecimal.ZERO
是一個預定義的常量,因此不需要在運行時從字符串求值,因爲BigDecimal("0")
會是。它會更快,並且不需要創建新的對象。
如果您的代碼需要在1.5之前運行,那麼您可以使用(非常惡意的)Singleton模式創建一個相當於BigDecimal.ZERO
的對象。第一次使用它時,它會調用BigDecimal("0")
創建一個零對象,並在隨後的調用中返回該對象。否則,如果您的代碼在1.5系統上運行,那麼您的單例對象可以返回BigDecimal.ZERO
而不會造成運行時損失。
使用ZERO不會創建新對象或需要任何解析。絕對要走的路。
出於好奇我檢查了BigDecimal的構造函數,它沒有對「0」字符串進行任何優化。所以肯定是的,有一個區別。
在談論運行時懲罰之前,請確保這段代碼很重要。設置分析並測量完整的用例。
儘管如此,喜歡Bigdecimal.ZERO
,因爲它是在編譯期進行檢查,而你可以小心輸入new BigDecimal("9")
,該編譯器會接受,但是這將導致錯誤到應用程序中。
我會刪除「基本」一詞 - 它是一個預定義的常量。 – 2008-11-06 18:21:32
好的電話,謝謝。 – 2008-11-06 18:22:55
新的BigDecimal(「0」)每次創建一個新的對象實例,但BigDecimal.ZERO不創建新的實例。 – 2008-11-06 19:35:24