无论是用于比较还是初始化新变量,使用这两个中的哪一个有区别吗?
我知道BigDecimal.ZERO是1.5的功能,所以这是一个问题,但假设我正在使用1.5,这有关系吗?
谢谢。
无论是用于比较还是初始化新变量,使用这两个中的哪一个有区别吗?
我知道BigDecimal.ZERO是1.5的功能,所以这是一个问题,但假设我正在使用1.5,这有关系吗?
谢谢。
BigDecimal.ZERO
是一个预定义的常量,因此不需要像BigDecimal("0")
那样在运行时从字符串中计算出来。这样做会更快,也不需要创建新的对象。
如果你的代码需要在1.5版本之前运行,那么可以使用(备受诟病的)单例模式创建等同于BigDecimal.ZERO
的对象。第一次使用它时,会调用BigDecimal("0")
来创建一个零对象,并在后续调用时返回该对象。否则,如果你的代码在1.5系统上运行,你的单例对象可以直接返回BigDecimal.ZERO
,而不会有运行时的惩罚。
使用ZERO不会创建新的对象,也不需要任何解析。绝对是推荐的方式。
在谈论运行时惩罚之前,请确保这段代码很重要。设置分析,并测量完整使用情况。
尽管如此,最好使用Bigdecimal.ZERO
,因为它在编译时经过检查,而您可能会意外输入new BigDecimal(“9”)
,编译器将接受它,但会导致应用程序出错。
出于好奇,我查看了BigDecimal的构造函数,发现它没有针对字符串"0"的任何优化。因此,肯定存在差异。