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

时间:2013-09-23 06:48:34

标签: java

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

8 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:9)

恕我直言原语更好。

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

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

Wrapper类将出现需要或强烈偏好对象的情况,例如将对象存储在集合,缓存或会话等中,它需要一个对象(如果没有,JRE会在它们之前将原语转换为Wrapper类)存储在二级缓存中)。以下链接将更好地解释:

Boolean vs boolean in Java

答案 6 :(得分:0)

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

答案 7 :(得分:-1)

Booolean是一个对象/引用类型,它包含一个布尔值,而原始类型中包含布尔值。

布尔 - 您将获得更多有用的方法。

布尔 - 可以节省大量内存。但是如果你使用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