为什么在短IF中发生NullPointerException

时间:2013-06-07 17:06:54

标签: java nullpointerexception

我编写了导致NullPointerException的简短Java代码。有没有人对此有解释?代码:

int val = 2;
Boolean result = (val == 0) ? false : ((val == 1) ? true : null);

同样遵循(简化版)代码将导致NullPointerException:

Object result = (false) ? false : (false ? true : null);

但是这个:

int val = 2;
Boolean result = (val == 0) ? Boolean.FALSE : ((val == 1) ? true : null);

和此:

Object result = (false) ? Boolean.FALSE : (false ? true : null);

或者这个:

Object result = (false) ? (Boolean)false : (false ? true: null);

3 个答案:

答案 0 :(得分:4)

我认为正在发生的事情是((val == 1) ? true : null)始终返回null,然后尝试将其展开到boolean。这会导致空指针异常。

在我这样说之后,@ JonSkeet将你的问题标记为重复,因为NullPointerException in ternary expression with null Long答案有更详细的解释。

答案 1 :(得分:0)

int val = 2;

布尔结果=(val == o)?假:真; //从代码中删除null并将其替换为true。

答案 2 :(得分:-1)

在java中,boolean仅允许truefalse,但布尔允许true falseNULL