java - BigDecimal.ZERO 与新的 BigDecimal(0)。使用哪个,为什么?

标签 java bigdecimal

我想知道这两个是否相同。任何人都可以验证吗? (我正在尝试用第二个替换第一个)

BigDecimal totalCurrentSales = new BigDecimal(0);

BigDecimal totalCurrentSales = BigDecimal.ZERO;

我问的原因是第一种方式声明它是不合适的,因为您不应该创建已经存在的 BigIntegerBigDecimal (ZERO, ONE, TEN) 的实例。所以我想知道我是否可以用第二种方式说它,它仍然被认为是创建一个实例。而不是我必须创建一个变量 zero 或等于 BigDecimal.ZERO 的东西。或者还有其他方法吗?

我试过了

BigDecimal totalCurrentSales = new BigDecimal(BigDecimal.ZERO);

但是eclipse不太开心。

最佳答案

在数学上,它们是相同的。此外,由于 BigDecimal 是不可变的,因此您无需担心创建新实例来进行新计算。只要您对 totalCurrentSales 实例执行一些操作,您实际上就会创建一个新的 BigDecimal 并将 totalCurrentSales 引用重新分配给新值。

从实例化的角度来看,它们不一定完全相同。例如,在 OpenJDK 6b14 实现中,BigDecimal.ZERO 是通过调用具有值 BigInteger.ZERO 的私有(private) new BigDecimal(BigInteger, long, int) 构造函数来创建的00

从代码质量的角度来看,使用 BigDecimal.ZEROnew BigDecimal(0) 更可取,因为您可以避免额外的实例化并在代码中使用文字。

关于java - BigDecimal.ZERO 与新的 BigDecimal(0)。使用哪个,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26364667/

相关文章:

java - 如何在log4j2中实现 "configureAndWatch"

ruby-on-rails - 如何比较 BigDecimal 与 ActiveRecord 小数字段?

java - BigDecimal.Divide 给出不正确的结果

java - 关于用户输入的 BigDecimal 计算错误

java - 调用了构造函数中的验证方法

java - 为此创建 TreeSet 或任何集合的副本

java - 通用堆栈不接受整数值

java - 将 Java 数字转换为 BigDecimal : best way

java - 预准备语句的 setBigDecimal 问题?

java - 将字符转换为大写