Boolean.FALSE:什么时候应该使用?

问题描述 投票:0回答:2

我一直在阅读 Robert Nystrom 的书 Crafting Interpreters 并发现了以下代码:

if (!scopes.isEmpty() && scopes.peek().get(expr.name.lexeme) == Boolean.FALSE) { // <- Focus here
      // some code here      
}

在我们声明变量的其他地方,本书使用了更常用的语法

boolean a = false
表示法。 Stack Overflow 有很多答案解释什么是
Boolean.FALSE
,但没有说明何时应该使用它。

在相等运算符的上下文中编写 Boolean.FALSE (或 Boolean.TRUE)是一种常见/良好的做法吗?如果是,那为什么?

或者,这是个人喜好和代码可读性的问题吗?

java types boolean
2个回答
0
投票

布尔包装值 TRUE 和 FALSE 被缓存,因此即使 == 比较引用,这些引用始终相同,并且 == 的工作方式就好像基于值一样。

这里没有什么问题。也许作者是想避免不必要的拆箱。


-1
投票

编写 Boolean.FALSE (或 Boolean.TRUE)是一种常见/良好的做法吗? 在相等运算符的背景下?如果是,那为什么?

一般来说,使用

Boolean.FALSE 不是

常见/良好做法,但在某些特定情况下 
Boolean.FALSE
 可能很有用。其中一种情况就是您问题中的代码。

基本上,该代码的含义与

if (!scopes.isEmpty() && scopes.peek().get(expr.name.lexeme) != null && !scopes.peek().get(expr.name.lexeme))

 相同,但无需调用 
peek().get(...)
 两次。

如果你想要完全相同的结果,但不使用

Boolean.FALSE

,你必须这样写:

Boolean tmp; if (!scopes.isEmpty() && (tmp = scopes.peek().get(expr.name.lexeme)) != null && !tmp) { ... }
因此,使用 

xxx == Boolean.FALSE

 在某些特定情况下可以发挥作用。

© www.soinside.com 2019 - 2024. All rights reserved.