Java核心:将null作为布尔值返回

5
我注意到这件事情:我的类有一个boolean类型的成员,在某些运行时刻,我在调试器中看到它的值为null。但是当我使用getter方法时,它返回false。
我知道,大多数书籍告诉你,Java中的boolean只有两个值,不像C / C ++中的每个非零数字都可以解释为true。所以我想知道,那里发生了什么?
是否还有其他情况,其他类型的值或null可以被解释为false?也许这方面的解释在JLS中,有人能指引一下吗?
编辑:昨天确实是调试的糟糕日子。首先,我浪费了4个小时去查找错误源,但在我反转源代码并再做同样的更改后,该错误消失了。然后就是这个问题。我尝试复现,但无法做到。这是幻觉还是周一真的很难?我不知道。感谢大家的回应!我想你们现在可以投票关闭或删除这个问题了。

你确定这不是一个“布尔”字段吗? - Joachim Sauer
请展示这个类的代码。至少包括字段声明和getter方法。 - rolve
你能展示一下你代码的相关部分吗?(布尔声明、获取器、你看到它为空的地方)并让我们知道你正在使用哪个调试器。 - assylias
1
不可能的。显示你的代码。我相信你在某个地方使用了 Boolean 而非 boolean - AlexR
好的,我明天会在一个干净的环境中尝试重现它,并在确认后发布代码。 - Aleksandr Kravets
1个回答

12

2
在这种情况下,getter 不会返回 false,而是抛出 NPE。 - rolve
1
除非它执行类似于 return boolField != null && boolField 的操作,否则请使用 @rolve。 - yshavit
1
如果getter方法返回一个boolean,它会抛出NPE异常,但如果返回一个Boolean,则不会。 - Matt Ball
7
我认为我们唯一能说的就是需要先看看代码。 - rolve
@AleksandrKravets 你能验证一下这个字段是不是Boolean类型吗?如果是,那就是你的问题所在。 - Matt Ball
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接