26

对于新变量的比较或初始化,您使用其中的哪一个会有所不同吗?

我知道 BigDecimal.ZERO 是 1.5 的功能,所以这是一个问题,但假设我使用的是 1.5,这有关系吗?

谢谢。

4

4 回答 4

37

BigDecimal.ZERO是一个预定义的常量,因此不必在运行时从字符串中求值BigDecimal("0")。它会更快,并且不需要创建新对象。

如果您的代码需要在 1.5 之前的版本上运行,那么您可以使用(备受诟病的)单例模式来创建等效于BigDecimal.ZERO. 第一次使用时,它会调用BigDecimal("0")创建一个零对象,并在后续调用中返回该对象。否则,如果您的代码在 1.5 系统上运行,您的单例对象可以直接返回BigDecimal.ZERO而不会受到运行时损失。

于 2008-11-06T18:08:07.170 回答
14

使用 ZERO 不会创建新对象或需要任何解析。绝对是要走的路。

于 2008-11-06T18:09:17.917 回答
4

在谈论运行时惩罚之前,请确保这段代码很重要。设置分析并测量完整的用例。

尽管如此,更喜欢Bigdecimal.ZERO在编译时检查它,而您可能会意外键入new BigDecimal("9")编译器会接受的 ,但这会导致应用程序出现错误。

于 2009-03-13T14:14:25.993 回答
3

出于好奇,我检查了 BigDecimal 的构造函数,它对“0”字符串没有任何优化。所以肯定是的,有区别。

于 2008-11-06T18:18:42.407 回答