为什么将布尔原始值更改为布尔对象引用?

时间:2011-12-28 15:59:00

标签: java reference boolean primitive

我正在阅读Effective Java,在第一章中,第一个示例将布尔原语值更改为布尔对象引用:

public static Boolean valueOf(boolean b) 
{
    return b ? Boolean.TRUE : Boolean.FALSE;
}

我的问题是:

  1. 布尔原语值和布尔对象引用有什么不同?

  2. 这样做的原因是什么?

5 个答案:

答案 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

booleanwrapper 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中的样板可能更少。)