我收到以下代码的错误:
装箱的值被拆箱,然后立即重新装箱
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/