You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigDecimal相加结果异常:求和未生效问题排查与解决

问题分析与解决

问题重现

你的代码如下:

BigDecimal amountA=myUtils.getRandomAmount(1, 100000);
BigDecimal amountB=myUtils.getRandomAmount(1, 100000);
BigDecimal sum=amountA;
sum.add(amountB);
logger.info("a: {} b: {} sum: {}", amountA, amountB, sum);

输出结果:

a: 68463.76 b: 99445.71 sum: 68463.76

原因

BigDecimal是不可变类,所有算术运算方法(如add、subtract)都不会修改调用方法的对象本身,而是返回一个全新的BigDecimal实例来存储运算结果。你仅调用了sum.add(amountB)但未接收这个返回值,sum变量仍指向最初的amountA对象,因此输出的sum值始终等于amountA。

解决方法

将add方法的返回值重新赋值给sum变量即可:

BigDecimal amountA=myUtils.getRandomAmount(1, 100000);
BigDecimal amountB=myUtils.getRandomAmount(1, 100000);
BigDecimal sum=amountA;
// 接收add方法返回的新实例
sum = sum.add(amountB);
logger.info("a: {} b: {} sum: {}", amountA, amountB, sum);

或者更简洁的写法:

BigDecimal amountA=myUtils.getRandomAmount(1, 100000);
BigDecimal amountB=myUtils.getRandomAmount(1, 100000);
BigDecimal sum = amountA.add(amountB);
logger.info("a: {} b: {} sum: {}", amountA, amountB, sum);

内容的提问来源于stack exchange,提问作者Martin Müller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:37:01