我什么时候应该使用布尔值而不是布尔值?我的意思是,为什么我要在一个应该包含“真”或“假”的变量中有一个空值。一个自发的答案(大多数人)是如果该值未知。即,如果我们不知道该值是真还是假。但是从编程的角度来看,我认为使用布尔值可能会破坏代码,因为我们不知道里面是什么。所以,我认为使用原始类型比包装更好。如果我错了,请纠正我。
8 回答
一般来说,包装类用于需要或强烈首选对象的情况。在这些情况之外,最好使用原始类型,因为它们的开销较低,您可以使用==
等。有两种半常见的情况:
- 收藏品。现在这是下一个案例的一个子集,但即使在 Java 5 之前,Collections 类也只支持对象作为键和值,这并没有改变。
- 泛型。泛型类型只能与对象一起使用,而不能与原始类型一起使用,因此如果您使用“布尔”作为类型参数,它必须是包装类。例如,如果您使用 a
Future
,则必须使用 aBoolean
而不是 aboolean
。(HT@user949300) - 甲骨文。JPA 和其他 ORM 系统在技术上可以使用原始字段,但习惯上使用包装类,因为开销足够高,无论如何这并不重要,并且包装类可以表示
NULL
可能存在于数据库中的值. 不过,通常最好禁止空值并为布尔值使用原语,因为从语义上讲,默认值通常比“未定义”更好。
由于布尔值被限制为true
or false
,所以很少看到它们在 Collections 或 Generics 中使用;一般来说,如果您将布尔值作为值,则只需使用它Collection#contains
。
布尔值有 3 个可能的值(空、真、假),而布尔值只能是(真、假)。
我非常喜欢原语。但是,布尔值是必要的:
- 当他们进入收藏时
- 当您需要允许空值时。以我的经验,这主要是如果它们存储在数据库中并且您需要 null 表示它们尚未被读取,或者用户尚未填写某些表格。
如果需要使用集合怎么办?Collection 不会存储原始类型,您需要在其中存储对象。集合提供了如此多的实用 API,因此如果您想使用它们,则需要一个布尔对象,因为集合将需要对象。尽管您始终可以使用自动装箱,这意味着您可以免受对象创建的影响,并且集合会在内部处理它。
Wrapper 类将用于需要或强烈首选对象的情况,例如将对象存储在 Collections、缓存或会话等中,其中需要对象(如果不需要,JRE 将在将原语存储在辅助中之前将其转换为 Wrapper 类缓存)。以下链接将更好地解释:
Boolean
是一个对象,因此您可以将它与泛型一起使用。例如,您可能必须Map<String,Boolean>
为每个字符串 (=key) 存储一个 true\false 值。你不能这样做Map<String,boolean>
,因为boolean
它不是一个对象——具体来说,它不是Object
. 泛型是编译时包装器,因此Map<Foo,Bar>
实际上是Map<Object,Object>
智能转换,不管是什么Foo
,Bar
只要它们是类或数组类型。但它们不能是原始的。
布尔值是一种对象/引用类型,它包装了一个布尔值,而布尔值是一个原始类型。
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