以下代码出现错误: 装箱的值被取消装箱,然后立即重新装箱
double triggerThresholdValue = triggerThreshold.doubleValue();
triggerThreshold = Double.min(triggerThresholdValue, 1) == 1 ?triggerThresholdValue/100 : triggerThreshold;
答案 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将值回绕