对于下面的代码行,我得到“盒装值未装箱,然后立即重新装箱”findbug ..如何解决这个问题?

时间:2013-12-26 05:52:10

标签: java findbugs

Double a = new BigDecimal(Double.valueOf(x))
    .setScale(2,BigDecimal.ROUND_HALF_DOWN).doubleValue();

x的类型为Double,我无法更改..

2 个答案:

答案 0 :(得分:2)

如果x的类型为Double,则Double.valueOf(x)是警告的原因。只需写一下x,它已经是正确的类型。

答案 1 :(得分:2)

Double.valueOf获取原始double并返回一个装箱Double,而不是相反。您传递的是Double框,因此x会自动装箱,然后由Double.valueOf明确装箱,然后再次自动装箱以将其传递给new BigDecimal。只需删除valueOf电话:

即可
Double a = new BigDecimal(x).setScale(2,BigDecimal.ROUND_HALF_DOWN).doubleValue();

这会将autounbox x一次传递给BigDecimal构造函数。