4
回答
java BigDecimal和RoundingMode的疑惑
华为云4核8G,高性能云服务器,免费试用   

以下的例子看源码后的疑问:

例子如下:

BigDecimal bd = new BigDecimal(6.876);

bd = bd.setScale(3, RoundingMode.UP);

然后进入BigDecimal的源码看到的是调用的这个方法:

public BigDecimal setScale(int newScale, RoundingMode roundingMode) {
        return setScale(newScale, roundingMode.oldMode);
    }

方法调用没什么问题,但是产生的第一个疑问:

roundingMode.oldMode这个为什么可以这样调用,因为RoundingMode的源码中对这个变量是这样定义的:

final int oldMode;

仅此一句而已,这里oldMode为什么可以直接用roundingMode.oldMode这样调用?实例. 有这样的用法吗?我自己创建了一个跟RoundingMode一模一样的类,但是.的时候没有这个

第二个疑问:

return setScale(newScale, roundingMode.oldMode);

这里调用的是BigDecimal类的这个方法:

public BigDecimal setScale(int newScale, int roundingMode) {}
这里第二个参数是int型,也就是说roundingMode.oldMode为int型,但是RoundingMode中的oldMode只做了声明,并没有初始化,这里难道是运行的时候默认赋值0了,但是赋值0也不对嘛,如果这样的话,roundingMode就永远是0了,而不是我传进来的RoundingMode的值了,这是什么个道理,希望高手可以解答一下
举报
顶部