BigDecimal(“0”)和BigDecimal.ZERO之间有区别吗?

时间:2008-11-06 18:05:09

标签: java bigdecimal zero

对于新变量的比较或初始化,它会对你使用哪一个产生影响吗?

我知道BigDecimal.ZERO是一个1.5功能,所以这是一个问题,但假设我使用1.5是否重要?

感谢。

4 个答案:

答案 0 :(得分:36)

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

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

答案 1 :(得分:14)

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

答案 2 :(得分:4)

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

然而,在编译时检查Bigdecimal.ZERO更喜欢它,而你可能会不小心输入编译器会接受的new BigDecimal("9"),但这会导致你的应用程序出现错误。

答案 3 :(得分:3)

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