相关疑难解决方法(0)

布尔值,条件运算符和自动装箱

为什么这会抛出 NullPointerException

public static void main(String[] args) throws Exception {
    Boolean b = true ? returnsNull() : false; // NPE on this line.
    System.out.println(b);
}

public static Boolean returnsNull() {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

虽然这不是

public static void main(String[] args) throws Exception {
    Boolean b = true ? null : false;
    System.out.println(b); // null
}
Run Code Online (Sandbox Code Playgroud)

解决办法是更换的方式false通过Boolean.FALSE,以避免null被拆箱到boolean,可呈现是不可能的.但这不是问题.问题是为什么?JLS中是否有任何引用证实了这种行为,尤其是第二种情况?

java autoboxing boolean nullpointerexception conditional-operator

128
推荐指数
3
解决办法
2万
查看次数

这是 java 布尔值可以为 null 的场景吗?为什么这段代码可以编译?

我们最近在生产中遇到了一个错误,我发现它非常有趣。我长期以来的理解是 Java 布尔值只能是 false 或 true。然而,在三元运算符中,它似乎最终可以解析为 null,并且它从未产生编译错误,并且一直构建到生产环境。我很惊讶以下代码不会生成编译错误。有谁知道为什么它编译得很好?恕我直言,它不应该编译!它最终解析的值是一个原生布尔值。

boolean por = (str == null || str.length() == 0) ? null : "true".equalsIgnoreCase(str);
Run Code Online (Sandbox Code Playgroud)

java boolean conditional-operator

3
推荐指数
1
解决办法
78
查看次数