当前位置: 首页 > 知识库问答 >
问题:

什么时候应该使用布尔值的空值?

岳风畔
2023-03-14

Javaboolean允许truefalse的值,而boolean允许truefalsenull。我已经开始将我的booleans转换为booleans。这可能会导致测试崩溃,例如

Boolean set = null;
...
if (set) ...

在考试期间

if (set != null && set) ...

似乎做作且容易出错。

什么时候,如果有的话,使用带有空值的Booleans有用吗?如果没有,那么包裹对象的主要优点是什么?

更新:有很多有价值的答案,我在自己的答案中总结了其中一些。我充其量只是Java的中间人,所以我试图展示我发现有用的东西。请注意,这个问题“措辞不正确”(布尔值不能“有空值”),但我保留了它,以防其他人有同样的误解

共有3个答案

赏星河
2023-03-14

哇,到底怎么了?仅仅是我,还是所有这些答案都是错误的,或者至少是误导性的?

布尔类是布尔基元类型的包装器。此包装器的用途是能够在接受对象或泛型的方法中传递布尔值。我是vector。

布尔对象永远不会有null值。如果您对布尔的引用为null,这仅仅意味着您的布尔从未被创建过。

你可能会发现这很有用:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Boolean.java

空布尔引用只能用于触发与您有任何其他空引用的类似逻辑。将它用于三状态逻辑是笨拙的。

编辑:请注意,Boolean a=true;是一个误导性的陈述。这实际上等于更接近于Boolean a=new Boolean(true);请参见自动装箱:http://en.wikipedia.org/wiki/Boxing_(computer_science)#自动装箱

也许这就是许多困惑的来源。

编辑2:请阅读下面的评论。如果有人知道如何重组我的答案,将其纳入其中,请这么做。

马业
2023-03-14

我几乎从不使用Boolean,因为它的语义含糊不清。基本上你有三种状态逻辑:真、假或未知。有时,当您让用户在两个值之间进行选择,而用户根本没有回答,并且您真的想知道这些信息时(想想:NULLable database column),使用它是很有用的。

我认为没有理由从boolean转换为boolean,因为它引入了额外的内存开销、NPE可能性和更少的输入。通常我使用笨拙的BooleanUtils。isTrue()使用Boolean让我的生活更轻松一点。

存在Boolean的唯一原因是能够拥有Boolean类型的集合(泛型不允许boolean以及所有其他原语)。

庄星汉
2023-03-14

每次使用boolean而不是Boolean。这将避免许多NullPointerExctives,并使您的代码更加健壮。

例如,Boolean很有用

  • 在集合中存储布尔值(列表、地图等)
 类似资料:
  • 问题内容: Java的允许值,并同时允许布尔值,和。我已经开始将s 转换为s。这可能导致测试崩溃,例如 测试时 似乎人为且容易出错。 何时将s与空值一起使用是否有用?如果从不,那么包装对象的主要优点是什么? 更新:有很多有价值的答案,我在自己的答案中总结了其中一些。我充其量只是Java的中级课程,因此我尝试展示了一些我认为有用的东西。请注意,问题是“用词不正确”(布尔值不能“具有空值”),但如果其

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的: 另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途: 在Python文档中,装饰器的解释如下: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想指的是自己(而不是实例)。我不完全理解为什么会这样,因为我总是可

  • 问题内容: 我看过各种文章,但我仍然不知道为什么不应该使用它。请让我知道您的想法。 问题答案: 我发现有必要在错误的设计中使用instanceof提示。可以肯定的是,将会出现一个大型,复杂的开关风格的构造。在我看到的其他大多数情况下,我们应该使用多态而不是instanceof。请参阅策略模式。(相关的使用示例) 我唯一需要使用的是实现时。

  • 问题内容: 我在阅读《 Swift编程语言》指南 时遇到了一个叫做的函数,但我仍然想知道为什么以及何时需要实现它,因为我们实际上不需要管理内存。 问题答案: 不需要实现该方法,但是如果需要在取消分配对象之前进行一些操作或清理,则可以使用它。 在苹果的文档包括例如: 因此,无论何时将玩家从游戏中移除,其硬币都会退还至银行。