我收到以下代码的错误:
装箱的值被拆箱,然后立即重新装箱

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

最佳答案

我会这样写代码:

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


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

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

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

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


这将强制两个表达式都具有Double类型(对象),因此删除了多余的取消装箱和重新装箱。

关于java - 装箱的值被取消装箱,然后立即重新装箱-Double,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51283864/

10-13 04:39