Java 已装箱的值取消装箱,然后立即重新装箱-双精度
我收到以下代码的错误信息: 已装箱的值取消装箱,然后立即重新装箱Java 已装箱的值取消装箱,然后立即重新装箱-双精度,java,Java,我收到以下代码的错误信息: 已装箱的值取消装箱,然后立即重新装箱 double triggerThresholdValue = triggerThreshold.doubleValue(); triggerThreshold = Double.min(triggerThresholdValue, 1) == 1 ?triggerThresholdValue/100 : triggerThreshold; 我会这样写代码: if (triggerThresholdValue > 1
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 = Double.min(triggerThreshold, 1) == 1
? Double.valueOf(triggerThreshold / 100)
: triggerThreshold;
这将强制两个表达式的类型都为Double(对象),从而删除冗余的取消装箱和重新装箱。我将这样编写代码:
if (triggerThresholdValue > 1.0) {
triggerThreshold = triggerThresholdValue / 100.0;
}
我相信这是等效的(没有做彻底的测试)。对我来说,这样更容易理解。可能会有一些无穷大、NaN、正负零的情况,但如果这些值没有出现在代码中,您应该不会有问题
为什么会得到这样的消息:Java需要决定三元运算符的结果类型:代码>。因此,两个可能的结果表达式(介于?
和:
之间的表达式和:
之后的表达式)需要具有相同的类型。在您的代码中,triggerThresholdValue/100
具有类型double
(小d
,原语),而triggerThreshold
具有类型double
(大写d
,对象)。我不知道为什么Java选择了double
而不是double
,但它必须做出选择。因此,在选择第二个值的情况下,Double
首先转换为Double
,也就是说,取消装箱,然后再次转换为Double
,装箱,因此可以将其分配给触发器阈值。它也是从哪里来的
因此,是的,我相信你在评论中的建议会奏效:
triggerThreshold = Double.min(triggerThreshold, 1) == 1
? Double.valueOf(triggerThreshold / 100)
: triggerThreshold;
这将强制两个表达式的类型都为Double(对象),从而删除冗余的取消装箱和重新装箱。为什么需要此triggerThresholdValue。?我们可以直接使用triggerThreshold
triggerThreshold = Double.min(triggerThreshold, 1) == 1 ?Double.valueOf(triggerThreshold/100) : triggerThreshold;
*已编辑:使用Double.valueOf将值包装回为什么需要此triggerThresholdValue。?我们可以直接使用triggerThreshold
triggerThreshold = Double.min(triggerThreshold, 1) == 1 ?Double.valueOf(triggerThreshold/100) : triggerThreshold;
*已编辑:使用Double.valueOf将值包装回这是否有效?Double-triggerThresholdValue=triggerThreshold.doubleValue();triggerThreshold=Double.min(triggerThresholdValue,1)==1?Double.valueOf(triggerThresholdValue/100):triggerThreshold;triggerThresholdaDouble
?triggerThreshold=Double.min(triggerThreshold,1)=1?Double.valueOf(triggerThreshold/100):triggerThreshold;。。。这能解决问题吗?是的,triggerThreshold是双重的。请不要在注释中添加代码,这很难阅读。最好将您的代码添加到那里。这行吗?double triggerThresholdValue=triggerThreshold.doubleValue();triggerThreshold=Double.min(triggerThresholdValue,1)==1?Double.valueOf(triggerThresholdValue/100):triggerThreshold;triggerThresholdaDouble
?triggerThreshold=Double.min(triggerThreshold,1)=1?Double.valueOf(triggerThreshold/100):triggerThreshold;。。。这能解决问题吗?是的,triggerThreshold是双重的。请不要在注释中添加代码,这很难阅读。最好在那里添加您的代码。