11

我编写了导致 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);

不是吗?

4

3 回答 3

4

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

在我这么说之后,@JonSkeet 将您的问题标记为重复,因为NullPointerException 在三元表达式中使用 null Long 答案有更详细的解释。

于 2013-06-07T17:13:27.750 回答
0

整数值 = 2;

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

于 2013-06-07T17:16:30.920 回答
-1

在 java 中,boolean只允许true和,false但布尔允许true falseNULL

于 2013-06-07T17:12:16.563 回答