gpt4 book ai didi

java - 将 BigDecimal.ZERO 添加到另一个 BigDecimal 值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:56 27 4
gpt4 key购买 nike

我仍在学习 Java,并且一直在阅读多个站点上的文章。我在 Java Code Geeks 找到了一篇文章我有一个问题。该文章正在解释开放/封闭原则。本文以对公司产品应用折扣的场景为例。第一部分代码如下:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Discount {

public BigDecimal apply(BigDecimal price) {

BigDecimal percent = new BigDecimal("0.10");
BigDecimal discount = price.multiply(percent);
return price.subtract(discount.setScale(2, RoundingMode.HALF_UP));
}
}

第二部分代码如下:

import java.math.BigDecimal;

public class DiscountService {

public BigDecimal applyDiscounts(BigDecimal price,Discount discount) {

BigDecimal discountPrice = price.add(BigDecimal.ZERO);
discountPrice = discount.apply(discountPrice);
return discountPrice;
}
}

在 Oracle 的站点上,BigDecimal 中的 ZERO 的值为 0,小数位数为零。这是否意味着在 price.add(BigDecimal.ZERO) 中我们只是将 0 添加到引入的价格中?如果是这样,为什么?或者只是简单地从价格中删除小数位?还是有其他目的?

谢谢!

最佳答案

price.add(BigDecimal.ZERO) 用于创建新的 BigDecimal,因为 BigDecimal 没有复制构造函数。

至于为什么,这可能是一个防御性副本,以防传入的 BigDecimal 实际上是一个“被破坏”的版本(因为 BigDecimal 不是 final),其值可以在事后更改。这在 Effective Java 中作为项目“在需要时制作防御性副本”进行了深入讨论;第 2 版中的第 39 项或第 3 版中的第 50 项。

关于java - 将 BigDecimal.ZERO 添加到另一个 BigDecimal 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com