BigDecimal(“0”)和BigDecimal.ZERO之间有区别吗?
问题描述:
无论是用于比较还是初始化新变量,它都会影响您使用的这些变量中的哪一个?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