这里只是想分享下,平时如果我们想要定义一些BigDecimal类型的变量,可以先看看BigDecimal有没有已经先做了定义,如new BigDecimal(0)就可以用BigDecimal.ZERO来代替,如下:
BigDecimal bigDecimal = BigDecimal.ZERO;
描述:
BigDecimal.ZERO是一个预定义的常量,因此不必在运行时从字符串评估为 BigDecimal(“0”)将是。它会更快,并且不需要创建新对象。
如果您的代码需要在 1.5 之前的版本上运行,那么您可以使用(备受诟病的)单例模式来创建一个等效于 BigDecimal.ZERO 的对象。 .第一次使用时,它会调用 BigDecimal(“0”)创建一个零对象,并在后续调用中返回该对象。否则,如果您的代码在 1.5 系统上运行,您的单例对象可能只返回 BigDecimal.ZERO没有运行时惩罚。
跟进BigDecimal类中,会发现BigDecimal类中已经定义了一些BigDecimal类型的常量数组,如下:
所以其实在BigDecimal类加载阶段的准备阶段,这些数组就会被初始化了,那自然就可以正常的提供使用,可以把这些数组中定义的各个BigDecimal类型的对象当作缓存,然后优先取缓存中的对象,避免创建重复的对象,这也能够起到优化代码的作用。
总结
用BigDecimal.ZERO替代new BigDecimal(0)只是一个引子,更多想表达的是,以后要定义BigDecimal类时,先看看有没现成的对象能够使用,避免一些没必要的操作。