为什么布尔值总是返回 null?

3
我已经编写了以下代码。
Boolean isit;

if(isit== true) {
    System.out.println("isit is true");
} else {
    System.out.println("isit is not false");
}

但它总是为null,而应该返回false作为default


6
默认情况下,booleanfalse,而像所有引用类型一样,默认情况下 Booleannull。在我看来,除非你真正需要使用包装器,否则请使用基元类型。顺便说一句,你不能使用 == 来比较 Boolean,你需要使用 equals,但是对于 boolean 来说也是多余的。 - Peter Lawrey
7个回答

20

当您将其声明为Boolean(请注意大写字母),它是一个对象,因此默认值为null

我想你意思是把它设置为boolean,而不是Boolean

此外,对于boolean,您可以执行以下操作:

boolean isit;
if (isit) {
    System.out.println("isit is true");
} else {
    System.out.println("isit is false");
}
//prints "isit is false"

10

与仅具有两种状态(即truefalse)的基本类型boolean不同,包装类型Boolean还具有第三种状态null。当Boolean对象为null时,它既不是true也不是false

当您将该对象与true进行比较时,该值会作为Boolean进行包装,并与null进行比较。结果为false。如果您将其与false进行比较,则会发生相同的情况,但下面的代码不会打印任何内容。

Boolean isit = null;
if (isit == true) { // true gets converted to Boolean.TRUE
    System.out.println("isit is true")
}
if (isit == false) { // false gets converted to Boolean.FALSE
    System.out.println("isit is false")
}

如果你需要在标记中有三种状态(truefalse 和“未设置”),那么应该使用Boolean;而当你只需要两种状态(truefalse)时,应该使用原始数据类型boolean


4

如果您正在使用包装类object,请不要忘记将其初始化为default值。默认情况下,所有wrapper class对象都会初始化为null。

您需要像这样初始化:

  Boolean B =  Boolean.TRUE;   
  Boolean B = true; 

或者取一个原始值

 boolean isit;  ///default false  

3

你的代码将永远无法编译,并给出一个错误,比如The local variable isit may not have been initialized

Boolean是一个包装类,不是原始数据类型。你只是初始化变量为

Boolean isit;

如果你不给任何值并且使用了一个变量,它将永远无法编译。
但是如果你使用基本类型boolean,例如:

boolean isit;

如果你没有指定任何值,那么默认情况下该值为false。
boolean isit;

if(isit) {
    System.out.println("isit is true");
} else {
    System.out.println("isit is false");
}

这将具有false的isit值。

这只是小问题,但 if(isit) 更加简洁。else 应该写成 isit is false - Kevin Meredith

2

因为...

输入:

Boolean object;
boolean primitive;

System.out.println(object); 
System.out.println(primitive); 

输出:

null
false


  • Boolean 是一个对象。
    • 如果没有给它赋值,它的值默认为null

另一方面,

  • boolean 是一种基本类型。
    • 如果没有给它赋值,它的值默认为false

0

布尔类型是一个包装类对象。根据Java惯例,对象的默认值始终为null。如果使用小写字母b表示布尔类型,则称其为原始类型,并且其默认值是你理解的false


0
在这种情况下,您必须将isit变量的值初始化为true/false,否则编译器不会让您编译代码,因为您在IF中使用isit变量,但没有给它一些值。在Java中,变量在使用之前必须已经被初始化。

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