为什么将布尔原始值更改为布尔对象引用?
我正在阅读《Effective Java》,在第一章中,第一个示例将布尔原始值更改为布尔对象引用:
public static Boolean valueOf(boolean b)
{
return b ? Boolean.TRUE : Boolean.FALSE;
}
我的问题是:
布尔原始值和布尔对象引用之间有什么区别?
这样做的原因是什么?
I am reading Effective Java and in the first chapter the first example changes a boolean primitive value into a boolean object reference:
public static Boolean valueOf(boolean b)
{
return b ? Boolean.TRUE : Boolean.FALSE;
}
My questions are:
What is the different between boolean primitive value and boolean object reference?
What is the reason to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您不能在泛型中使用基元。你不能这样做:
但你可以这样做:
You cannot use primitives in generics. You cannot do this:
but you can do this:
请记住,原始 boolean 有两个可能的值:true 或 false。 Boolean 对象有三种:true、false 和 null。这有时非常有用。
Remember that the primitive boolean has two possible values: true or false. The object Boolean has three: true, false, and null. That is sometimes very useful.
原语不能在所有上下文中使用。例如,当在任何集合类中使用时,需要对象类型。无论如何,这主要是通过自动装箱为您完成的。但你还是应该知道这一点,否则你有一天会被咬的。
另一件事是对象类型可以包含 null。如果您需要区分真、假和未知,使用
Boolean
可能是一个简单的解决方案。A primitive cannot be used in all contexts. For instance, when used in any of the collection classes, an object type is required. This is mostly done for you, anyway, by auto-boxing. But you should still know about it, or you will get bitten at one point.
Another thing is that an object type can contain null. In cases where you need to differentiate between true, false and unknown, using
Boolean
can be an easy solution.1>
Boolean
是boolean
的 包装类包装器
class
用于应用一些方法和计算,这是使用原始数据类型不可能实现的。2>这取决于情况。
1>
Boolean
is wrapper class forboolean
wrapper
class
is used to apply some methods and calculation, which is not possible using primitive data types.2> it depends upon situations.
我相信 Boolean 最常见的用途是用于通用函数对象,不幸的是,用于反射。
例如:
(Java SE 8 中的样板代码可能更少。)
I believe the most common uses for
Boolean
are for use in generic function object and, unfortunately, reflection.For instance:
(Probably less boilerplate in Java SE 8.)