我编写了导致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);
不
答案 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
仅允许true
和false
,但布尔允许true
false
和NULL