【发布时间】:2020-12-03 05:56:09
【问题描述】:
Boolean isTrue = condition1 ? true : (
id == null ? null : condition2);
当 condition1 返回 true 时,代码运行良好(有意义),但是当 condition1 为 false 时,代码失败并出现空指针异常。 自己试试 - https://www.ideone.com/epj9Jd
这有点令人困惑,没有意义。对此的解释将不胜感激。
【问题讨论】:
-
请出示实际完整代码。
-
简而言之,因为
id == null ? >> null <<。请改用false或Boolean.FALSE。 -
或者,更好的是minimal reproducible example。
-
确实如此。但是,然后您将其拆箱。拆箱
null会引发 NPE。 -
理解的诀窍在于条件表达式的类型是由第二个操作数而不是第三个操作数决定的。但真正的诀窍是避免使用
null作为Boolean...'因为它会产生问题。
标签: java nullpointerexception runtime-error conditional-operator