4
回答
java BigDecimal和RoundingMode的疑惑
注册华为云得mate10,2.9折抢先购!>>>   

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

例子如下:

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的值了,这是什么个道理,希望高手可以解答一下
举报
tianhandige...
发帖于5年前 4回/1K+阅
顶部