2008-11-06 4541 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"),该编译器会接受,但是这将导致错误到应用程序中。

相关问题