三元运算符的结果不同,否则

时间:2018-12-05 23:36:29

标签: java

1. hasTimePeriodExtraDays = (externalSystemConfigsDTO == null) ? true : externalSystemConfigsDTO.hasTimePeriodExtraDays();

2. if(externalSystemConfigsDTO == null){
            hasTimePeriodExtraDays = true;
        } else {
            hasTimePeriodExtraDays = externalSystemConfigsDTO.hasTimePeriodExtraDays();
        }

第1个子句不将UT作为空指针抛出而传递,而第2个子句则通过UT。

1 个答案:

答案 0 :(得分:1)

hasTimePeriodExtraDays()返回什么?布尔基元还是布尔对象?和hasTimePeriodExtraDays一样吗?

三元组带来了看不见的自动装箱,以确保双方的类型相同,这也许可以解释这一点。

E.G。如果它返回一个布尔值并且该变量是一个布尔值,则在您的IF中,即使返回值为null,也可以正常工作。

但是在您的青少年时代,它们可能都将转换为布尔型原语-如果返回为null,则您将看到NullPointerException。

更多信息-Why does the ternary operator unexpectedly cast integers?