Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 已装箱的值取消装箱,然后立即重新装箱-双精度_Java - Fatal编程技术网

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;triggerThreshold
a
Double
?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;triggerThreshold
a
Double
?triggerThreshold=Double.min(triggerThreshold,1)=1?Double.valueOf(triggerThreshold/100):triggerThreshold;。。。这能解决问题吗?是的,triggerThreshold是双重的。请不要在注释中添加代码,这很难阅读。最好在那里添加您的代码。