27

虽然我知道根据定义,布尔值仅包含两种状态,真或假。我想知道布尔值在使用这些状态之一初始化之前有什么值。

4

8 回答 8

69

它默认为假。

编辑:根据大众需求:

除非您使用默认为 null的包装Boolean 。– sudhir.j

于 2009-06-04T18:04:20.427 回答
16

如果是局部变量,则在初始化之前引用它是编译器错误。如果是字段,则初始化为 false。

于 2009-06-04T18:04:59.833 回答
9
public class NewMain {

    boolean foo;
    Boolean bar;

    public static void main(String[] args) {
        NewMain obj = new NewMain();

        obj.whatBoolean();
    }

    public void whatBoolean() {
        System.out.println(foo);
        System.out.println(bar);
    }
}

输出

false
null

我知道这是一个更哲学的问题,但是由于自动装箱,您可以将 Java 用作几乎真正的 OO 语言(我讨厌原始类型......现在只有它也可以反过来工作)。但是,它确实会在您使用对象时改变行为(为了更好的 IMO)。

于 2009-06-04T18:33:32.890 回答
2

没有第三种状态。正如@Yishai 所说,如果您不分配值,则布尔字段默认为false。局部变量必须在使用前赋值:

访问未初始化的局部变量将导致编译时错误

请参阅文档

于 2009-06-04T18:05:41.080 回答
1

在 JAVA 中,布尔类型默认为 False。

于 2009-06-04T18:05:13.263 回答
1

仅供参考,boolean 默认为 false,原始数字默认为 0、0L、0f 或 0d(视情况而定),char 默认为 '\0',对象引用(例如 Boolean)默认为 null。

这也适用于数组的内容。(一个常见的问题是对象数组最初充满了空值)

于 2009-06-05T19:55:32.587 回答
0

这是假的

于 2009-06-04T18:05:42.780 回答
0

如果你有类似的东西

boolean isTrue;

System.out.println(isTrue);

你应该得到一个编译时错误,因为布尔值没有被初始化。默认情况下,当您尝试初始化它时,它将设置为 false;

于 2009-06-04T18:06:45.803 回答