我何时应该使用布尔值而不是布尔值?我的意思是,为什么我要在一个应该包含“true”或“false”的变量中有一个空值。一个自发的答案(对大多数人来说)将是值,如果值未知。即,如果我们不知道该值是真还是假。但是从编程的角度来看,我认为使用布尔可能会破坏代码,因为我们不知道里面是什么。所以,我认为使用原始类型比包装更好。如果我错了,请纠正我。
答案 0 :(得分:11)
一般来说,包装类用于需要或强烈偏好对象的情况。在这些情况之外,最好使用原始类型,因为它们具有较低的开销,您可以使用==
等。有两种主要情况经常出现这种情况:
Future
,则必须使用Boolean
而不是boolean
。 (HT @ user949300)NULL
值存在于数据库中。由于布尔值仅限于true
或false
,因此在集合或泛型中使用它们并不常见;一般来说,如果你有一个布尔值作为值,你只需使用Collection#contains
。
答案 1 :(得分:9)
恕我直言原语更好。
总是喜欢原语而不是包装。无论我在哪里使用原语,我都会选择它们,因为在运行时,如果我们使用包装器,boxing conversions和unboxing conversions会发生,显然需要更多时间。如果你在那里使用原语,你可以节省时间。
与往常一样,这取决于您的要求是否需要Object
(可以是null
),或者您可以在您的情况下使用原语(不能是null
)。
例如:假设您正在处理集合,那么您没有选项,您必须使用包装器:)。
答案 2 :(得分:4)
Boolean有3个可能的值(null,true,false),而boolean只能是(true,false)。
答案 3 :(得分:3)
我更喜欢原始人。但是,布尔人是必要的:
答案 4 :(得分:0)
如果您需要使用收藏品怎么办? Collection不会存储基本类型,您需要在那里存储对象。 集合提供了很多实用程序api,因此如果你想使用它们,则需要一个Boolean对象,因为集合需要对象。 虽然你总是可以使用自动装箱,这意味着你可以防止对象的创建和收集在内部进行处理。
答案 5 :(得分:0)
Wrapper类将出现需要或强烈偏好对象的情况,例如将对象存储在集合,缓存或会话等中,它需要一个对象(如果没有,JRE会在它们之前将原语转换为Wrapper类)存储在二级缓存中)。以下链接将更好地解释:
答案 6 :(得分:0)
Boolean
是一个对象,因此您可以将其与泛型一起使用。例如,您可以让Map<String,Boolean>
为每个字符串(=键)存储true \ false值。你不能Map<String,boolean>
,因为boolean
不是一个对象 - 具体来说,它不是Object
的子类。泛型是编译时包装器,因此Map<Foo,Bar>
实际上Map<Object,Object>
具有智能转换,无论Foo
和Bar
是什么 - 只要它们是类或数组类型。但他们不能成为原始人。
答案 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