我正在阅读Effective Java,在第一章中,第一个示例将布尔原语值更改为布尔对象引用:
public static Boolean valueOf(boolean b)
{
return b ? Boolean.TRUE : Boolean.FALSE;
}
我的问题是:
布尔原语值和布尔对象引用有什么不同?
这样做的原因是什么?
答案 0 :(得分:4)
您不能在泛型中使用基元。你不能这样做:
List<boolean> x;
但你可以这样做:
List<Boolean> x;
答案 1 :(得分:2)
请记住,原始布尔有两个可能的值: true 或 false 。对象布尔有三个: true , false 和 null 。这有时非常有用。
答案 2 :(得分:1)
原语不能在所有上下文中使用。例如,在任何集合类中使用时,都需要对象类型。无论如何,这主要是通过自动装箱完成的。但你仍然应该知道它,否则你会被咬伤。
另一件事是对象类型可以包含null。如果您需要区分true,false和unknown,使用Boolean
可以是一个简单的解决方案。
答案 3 :(得分:0)
1&GT;对于Boolean
boolean
为wrapper class
包装类用于表示Object时的原始值 是必须的。的维基百科强>
wrapper class
用于应用某些方法和计算,这是使用原始数据类型无法实现的。
2 - ;这取决于具体情况。
答案 4 :(得分:0)
我认为Boolean
最常见的用途是用于泛型函数对象,不幸的是,反射。
例如:
boolean exists = java.security.AccessController.doPrivileged(
new PrivilegedAction<>() {
public Boolean run() {
return file.exists();
}
}
);
(Java SE 8中的样板可能更少。)