如何进行Java BigDecimal初始化,哪种方法更好?
我必须将0分配给creditBalacne现在我们可以得到双向如何进行Java BigDecimal初始化,哪种方法更好?,java,Java,我必须将0分配给creditBalacne现在我们可以得到双向 private BigDecimal creditBalance = new BigDecimal(0); 还有其他方式 private BigDecimal creditBalance1 = BigDecimal.ZERO; 哪一个更好,为什么?开发人员更喜欢哪种方式?从总体上看,使用哪种方式并不重要。 但是,既然已经有一个零的常数,您不妨使用它。第一个选项将创建新对象(以及以后的垃圾) 如果性能很重要,第二种选择可能更可取。
private BigDecimal creditBalance = new BigDecimal(0);
还有其他方式
private BigDecimal creditBalance1 = BigDecimal.ZERO;
哪一个更好,为什么?开发人员更喜欢哪种方式?从总体上看,使用哪种方式并不重要。
但是,既然已经有一个零的常数,您不妨使用它。第一个选项将创建新对象(以及以后的垃圾) 如果性能很重要,第二种选择可能更可取。如果有疑问,请使用对您来说最清晰、最简单的方法 顺便说一句,另一个选择是使用
private BugDecimal creditBalance1 = BigDecimal.valueOf(0);
这将尽可能使用值缓存(如果没有,则创建新对象)通常首选第二个。它将为您提供存储在BigDecimal值缓存中的实例;因此避免了新对象的创建。使用第二种方法后修改
creditBalance1
是否会引发错误,因为ZERO
是最终对象@ZouZou@boxed__l不,creditBalance1
不是final
和BigDecimal
实例是不可变的,因此您必须将运算结果重新分配给变量。@zouzu是缓存不可用的,因为BigDecimal会通过此方法吗Exception@subodh为什么没有缓存?它是在BigDecimal
类中硬编码的。它将始终存在(除非您可能使用反射,但这是另一个故事…);是否会在任何情况下通过异常,如缓存不可用,它将抛出异常?当你定义另一种方法时?@subodh你能澄清你的意思吗?抛出的异常是什么?为什么缓存不可用?正如你提到的另一种方法,像这样使用私有的BigDecimal creditBalance1=BigDecimal.ZERO有什么问题@您需要知道所有可用的常量,这少于缓存的值的数量。i、 e.零
可以,但不是一般解决方案。