【问题标题】:Why NullPointerException occur in short IF [duplicate]为什么 NullPointerException 在短 IF 中发生 [重复]
【发布时间】:2013-06-04 01:52:00
【问题描述】:

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

没有?

【问题讨论】:

  • ((val == 1) ? true : null) 这里将null 更改为false??
  • 使用boolean 而不是Boolean 来避免许多NullPointerExceptions
  • @TheNewIdiot 这对这种情况没有影响
  • 可能是null.booleanValue() 抛出了NPE。
  • @TheNewIdiot 我希望有可能在布尔值中包含三个值:true、false 和 null 用于错误检测。

标签: java nullpointerexception


【解决方案1】:

int val = 2;

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 那么为什么在修复 NPE 的示例中将 false 更改为 Boolean.FALSE
    【解决方案3】:

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

    【讨论】:

    • 那么,NPE 的原因是什么?
    • 哦,快,希望这是评论而不是答案。 @___@
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2016-11-17
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多