什么时候应该使用布尔而不是布尔值?

我什么时候应该使用布尔而不是布尔值? 我的意思是,为什么我要在一个应该包含“true”或“false”的变量中有一个空值。一个自发的答案(对大多数人来说)就是这个值是未知的。 即,如果我们不知道该值是真还是假。 但是从编程的角度来看,我认为使用Boolean可能会破坏代码,因为我们不知道里面是什么。 所以,我认为使用原始类型比包装更好。如果我错了,请纠正我。

一般来说,包装类用于需要或强烈偏好对象的情况。 在这些情况之外,最好使用原始类型,因为它们具有较低的开销,您可以使用==等。有两种主要情况经常出现这种情况:

  • 集合。 现在这是下一种情况的一个子集,但即使在Java 5之前,Collections类仅支持对象作为键和值,并且这没有改变。
  • generics。 generics类型只能用于对象,而不能用于原语,因此如果你使用“boolean”作为类型参数,它必须是包装类。 例如,如果您使用的是Future ,则必须使用Boolean而不是boolean 。 (HT @ user949300)
  • ORM。 JPA和其他ORM系统在技术上可以使用原始字段,但是习惯上使用包装类,因为开销足够高,无论如何都不重要,并且包装类可以表示可能存在于其中的NULL值。数据库。

由于布尔值被限制为truefalse ,因此在Collections或Generics中使用它们并不常见; 一般来说,如果你有一个布尔值作为值,你只需使用Collection#contains

恕我直言 ,原始是更好的。

总是喜欢原语而不是包装。 无论我在哪里使用原语,我都会选择它们,因为在运行时,如果我们使用包装器,就会发生装箱转换和拆箱转换 ,显然需要更多时间。 如果您在那里使用原语,则可以节省时间。

和往常一样,它取决于您的要求是否需要一个Object (可以为null ),或者您可以在您的情况下使用原语(不能为null )。

例如:假设您正在处理集合,那么您没有选项,您必须使用包装器:)。

Boolean有3个可能的值(null,true,false),而boolean只能是(true,false)。

我更喜欢原始人。 但是,布尔是必要的:

  1. 当他们进入collections
  2. 当您需要允许空值时。 根据我的经验,这主要是如果它们存储在数据库中并且您需要null以指示它们尚未被读取,或者用户尚未填写某种forms。

如果您需要使用集合怎么办? 集合不会存储基本类型,您需要在那里存储对象。 集合提供了很多实用程序api,因此如果你想使用它们,则需要一个Boolean对象,因为集合需要对象。 虽然您总是可以使用自动装箱,这意味着您可以避免对象创建,并且内部会对其进行收集。

Boolean是一个对象,因此您可以将其与generics一起使用。 例如,您可以使用Map为每个字符串(=键)存储true \ false值。 你不能做Map ,因为boolean不是一个对象 – 具体来说,它不是Object的子类。 generics是编译时包装器,因此Map实际上是Map具有智能转换,无论FooBar是什么 – 只要它们是类或数组类型。 但他们不能成为原始人。

Wrapper类将在需要或强烈喜欢对象的情况下,例如将对象存储在Collections,cache或session等中,它需要一个对象(如果没有,JRE会在将它们存储到辅助节点之前将它们转换为Wrapper类)高速缓存)。 以下链接将更好地解释:

Java中的布尔值与布尔值

Booolean是一个对象/引用类型,它包含一个布尔值,而布尔值则包含在一个基本类型中。

Boolean – 您将获得更多有用的方法。

boolean – 会为你节省大量的内存。 但是如果使用Boolean.valueOf(value) of new Boolean(value) ,那应该不是原因。

像这样的基元和对象之间的转换称为装箱/拆箱。

点击以下链接获取更多信息:

http://javaeye.wordpress.com/2008/06/17/boxing-and-unboxing-conversion/

http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html

http://www.javapractices.com/topic/TopicAction.do?Id=197