gpt4 book ai didi

java - 这是一个java boolean 值可以为空的场景吗?为什么这段代码会编译?

转载 作者:行者123 更新时间:2023-12-05 01:04:38 25 4
gpt4 key购买 nike

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

boolean por = (str == null || str.length() == 0) ? null : "true".equalsIgnoreCase(str);

最佳答案

Does anyone know why it compiles just fine?

最终,因为自动装箱/自动拆箱。

当编译器处理一个三元表达式时,它使用第二个和第三个操作数来选择表达式的结果类型。在您的情况下,第二个具有 null 类型,第三个具有(原始) boolean 类型。这些不是直接兼容的,但由于自动装箱,两者都与类型 Boolean 兼容。因此,表达式的结果具有类型 Boolean确实支持 null

由于自动un装箱,允许将Boolean类型的值赋给boolean类型的变量, 但是如果分配的值为 null,这将失败并返回 NullPointerException,就像您调用了 booleanValue() 方法就可以了。我认为这是您在生产中观察到的错误。

这是自动装箱的问题之一。

关于java - 这是一个java boolean 值可以为空的场景吗?为什么这段代码会编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71784682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com