装箱的值被取消装箱,然后立即重新装箱-Double

时间:2018-07-11 11:03:02

标签: java

以下代码出现错误: 装箱的值被取消装箱,然后立即重新装箱

double triggerThresholdValue = triggerThreshold.doubleValue();
triggerThreshold = Double.min(triggerThresholdValue, 1) == 1 ?triggerThresholdValue/100 : triggerThreshold;

2 个答案:

答案 0 :(得分:1)

我会这样写代码:

    if (triggerThresholdValue > 1.0) {
        triggerThreshold = triggerThresholdValue / 100.0;
    }

我认为这是等效的(尚未进行全面的测试)。对我来说,更容易理解这种方式。可能会有一些无穷大,NaN以及正负零的极端情况,但是如果这些值未出现在您的代码中,则应该没事。

为什么收到消息:Java需要确定三元运算符? :的结果类型。因此,两个可能的结果表达式(?:之间的一个以及:之后的一个)必须具有相同的类型。在您的代码中,triggerThresholdValue/100的类型为double(原始的小d,而triggerThreshold的类型为Double(大写的D,对象)。我不知道Java为什么选择double而不是Double,但是Java必须做出选择。因此,在选择第二个值的情况下,Double首先转换为double,即取消装箱,然后再次转换为Double,进行装箱,因此可以将其分配给{ {1}}。它也是从哪里来的。

是的,我相信您在评论中的建议会起作用:

triggerThreshold

这将强制两个表达式都具有 triggerThreshold = Double.min(triggerThreshold, 1) == 1 ? Double.valueOf(triggerThreshold / 100) : triggerThreshold; 类型(对象),从而删除了多余的取消装箱和重新装箱。

答案 1 :(得分:1)

为什么需要此triggerThresholdValue。我们可以直接使用triggerThreshold

 triggerThreshold = Double.min(triggerThreshold, 1) == 1 ?Double.valueOf(triggerThreshold/100) : triggerThreshold;

*编辑:使用Double.valueOf将值回绕