Java中的第三个布尔状态是什么?

27

虽然我知道按照定义,布尔类型只有两个状态:true或false。但我想知道在它被初始化为其中一个状态之前,布尔类型的值是什么。


48
第三个布尔状态通常是“文件未找到”。 - Brian
6
@Brian,这要看你是否实现了Paula Bean呀? - Paul Tomblin
11
@Paul:当你不观察时,它就不存在。只有当你打开门时,量子函数才会坍缩 :D - talonx
3
当你没有观察时,它是概率云! - Ali Shakiba
8个回答

69

3
通常情况下,Java变量的默认值可以称作C程序员所说的“假值”,例如0、null、false等。 - hbw
11
除非您使用默认为 null 的封装布尔值。 - Sudhir Jonathan
@sudhir.j 绝对正确。我希望答案被编辑以包含这一点。 - Ian McLaird
我确实知道这个事实,sudhir.j,这就是为什么我将问题标记为原始的原因,但我也希望答案得到编辑,以便让其他人受益。 - Bobby

16
如果它是一个局部变量,在初始化之前引用它将导致编译器错误。如果它是一个字段,它将被初始化为false。

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用作几乎真正的面向对象语言(我讨厌原始类型...现在只要它也能反向工作就好了)。 但是,当您使用对象时,它确实会改变行为(在我看来更好)。


2

不存在第三种状态。

正如@Yishai所说,如果不给布尔类型的字段赋值,默认为false。局部变量在使用前必须进行赋值:

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

请参阅文档


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

1

顺便提一下,布尔值默认为false,原始数字默认为0、0L、0f或0d,字符默认为'\0',对象引用(例如Boolean)默认为null。

这也适用于数组的内容。(一个常见的坑是对象数组最初都是空值)


0
如果你有类似这样的东西:
boolean isTrue;

System.out.println(isTrue);

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


2
是的,但如果布尔值是实例变量,则默认为false,没有警告。 - Lawrence Dol

0

它是假的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接