我在这个函数里传了一个List 和一个bigDecimal 过来 然后建了2个栈 bigdecimal引用变量 xxglfSum和 xyglfSum 。然后取出这个List里的MAP ,然后再用xxglfSum这个引用变量指向这个map里的x.get("XXGLF")。 然后关键就是我用这个引用变量去multiply也就是乘我传过来的形参 。按道理来说这个引用变量是指向原来map里get到的堆地址,我做乘法的时候 为什之后来这个堆地址的值没有改变。难道multiply这个方法会生产新的堆变量? 还是说我的理解有错误,求高手解答下。
你这样写不会报错么?String类型不能转换成BigDecimal
因为你每次都重置了变量,也就是说循环经过一般都是最后一次的;
要记录所有过程的结果,需要你改变其中一点代码;
//如果是相乘,就初始化1,如果是相加就初始化0
BigDecimal xxglfSum = new BigDecimal(1);
xxglfSum = (BigDecimal)x.get("XXGLF");
改成临时变量:
BigDecimal xxglfSumTmp = (BigDecimal)x.get("XXGLF");
1.如果是所有数据相乘:
xxglfSum = xxglfSum.multiply(xxglfSumTmp).multiply(curInAmt);
2.如果是相加:
xxglfSum = xxglfSum.add(xxglfSumTmp.multiply(curInAmt));
所有的BigDecimal计算都会产生一个新的结果引用,只需要赋值就可以;
所以你的主要原因是每次的xxglfSum = (BigDecimal)x.get("XXGLF");
导致了结果出现问题;
如果有帮助,希望采纳....