Java在三元组中为原语返回null

时间:2017-06-12 07:06:43

标签: java compiler-errors ternary

以下(逻辑上)是编译时错误:

public int myMethod(MyObject input) {
   if (input == null) {
     return null; // compiler says I cannot return null for primitive type
   } else {
     return 1;
   }
}

到目前为止一切顺利。我不明白,以下是允许的:

public int myMethod(MyObject input) {
   return input == null ? null : 1;
}

为什么呢?认识到这对编译器应该是直截了当的,还是我在这里错过了一些关键点?

(当然,如果在三元运算符中最终得到“空分支”,那么它是NPE,还有什么?:))

1 个答案:

答案 0 :(得分:2)

三元条件运算符的类型由其第二和第三个操作数的类型决定。

的情况下
input == null ? null : 1

类型为Integer,可以同时分配null1

编译器允许您的方法返回Integer,因为它可以自动取消装箱到int,因此它适合int的{​​{1}}返回类型。

您的特定代码可能抛出myMethod的事实不是编译器可以检测到的。