BigDecimal(“ 0”)和BigDecimal.ZERO之间有区别吗?
-
06-07-2019 - |
题
对于新变量的比较或初始化,它会对你使用哪一个产生影响吗?
我知道BigDecimal.ZERO是一个1.5功能,所以这是一个问题,但假设我使用1.5是否重要?
感谢。
解决方案
BigDecimal.ZERO
是预定义的常量,因此不必在运行时从字符串计算 BigDecimal(" 0")
。它会更快,不需要创建新对象。
如果您的代码需要在1.5之前运行,那么您可以使用(备受诟病的)Singleton模式来创建一个等同于 BigDecimal.ZERO
的对象。第一次使用它时,它将调用 BigDecimal(" 0")
来创建零对象,并在后续调用中返回该对象。否则,如果您的代码在1.5系统上运行,则您的单例对象只能返回 BigDecimal.ZERO
而不会损失运行时间。
其他提示
使用ZERO不会创建新对象或需要任何解析。绝对是要走的路。
在谈论运行时处罚之前,请确保这段代码很重要。设置分析并测量完整的用例。
然而,更喜欢 Bigdecimal.ZERO
,因为它在编译时被检查,而你可能不小心输入 new BigDecimal(" 9")
,编译器会接受它,但是这将导致你的应用程序出现错误。
出于好奇,我检查了BigDecimal的构造函数,并且它没有对“0”进行任何优化。串。所以肯定是的,这是有区别的。
不隶属于 StackOverflow