调用BigDecimal.add方法相加两个对象无效果是什么原因?
核心原因
BigDecimal是不可变类,它的所有数值运算方法(包括add()、subtract()、multiply()等)都不会修改调用方法的原对象,而是返回一个全新的BigDecimal实例承载运算结果。你当前的代码仅调用了this.balanceWallet.add(balanceWallet),但没有接收该方法返回的新对象,原有this.balanceWallet指向的实例不会发生任何变更,所以看起来代码执行没有效果,IDE的提示正是在提醒你忽略了add()方法的返回值。
修复代码
将运算返回的新对象赋值给this.balanceWallet即可实现余额累加:
public void addBalanceWallet(BigDecimal balanceWallet) { this.balanceWallet = this.balanceWallet.add(balanceWallet); }
优化建议
可以补充参数校验和空值处理,避免出现空指针或不符合业务逻辑的异常:
public void addBalanceWallet(BigDecimal balanceWallet) { // 校验传入的新增余额合法性 if (balanceWallet == null || balanceWallet.compareTo(BigDecimal.ZERO) < 0) { throw new IllegalArgumentException("新增余额不能为null或负数"); } // 兼容当前余额为null的情况 if (this.balanceWallet == null) { this.balanceWallet = BigDecimal.ZERO; } this.balanceWallet = this.balanceWallet.add(balanceWallet); }
内容的提问来源于stack exchange,提问作者JONKI
相关产品推荐
相关产品推荐

