Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何进行Java BigDecimal初始化,哪种方法更好?_Java - Fatal编程技术网

如何进行Java BigDecimal初始化,哪种方法更好?

如何进行Java BigDecimal初始化,哪种方法更好?,java,Java,我必须将0分配给creditBalacne现在我们可以得到双向 private BigDecimal creditBalance = new BigDecimal(0); 还有其他方式 private BigDecimal creditBalance1 = BigDecimal.ZERO; 哪一个更好,为什么?开发人员更喜欢哪种方式?从总体上看,使用哪种方式并不重要。 但是,既然已经有一个零的常数,您不妨使用它。第一个选项将创建新对象(以及以后的垃圾) 如果性能很重要,第二种选择可能更可取。

我必须将0分配给creditBalacne现在我们可以得到双向

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.
可以,但不是一般解决方案。