Java检查布尔值是否为空


74

如何检查布尔值是否为null?因此,如果我知道“ hideInNav”为空。如何阻止它进一步执行?像下面这样的东西似乎不起作用,但是为什么呢?

boolean hideInNav = parent.getProperties().get("hideInNav", false);
String hideNavigation = hideInNav != null ? hideInNav : "";

Answers:


124

boolean只能是truefalse因为它是原始数据类型(+boolean变量的默认值为false)。Boolean如果要使用null值,则可以改用类。布尔是一种引用类型,这就是您可以分配null给布尔“变量”的原因。例:

Boolean testvar = null;
if (testvar == null) { ...}

所以我可以做些什么:** Boolean hideInNav = parent.getProperties()。get(“ hideInNav”,false); if(hideInNav!= null){做某事} **
Delmon Young

1
是的,因为这样可以hideInNav保存对一个Boolean对象的引用并且可以被null引用(未分配引用)。因此,您可以检查参考是否为null
2013年

1
我使用BooleanUtils.isTrue(java.lang.Boolean bool)来检查条件中的状态,因为Boolean可以为null。 commons.apache.org/proper/commons-lang/javadocs/api-2.4/org/…–
Youness

没有apache commons:Boolean.TRUE.equals(xxx)
Eich

58

Aboolean不能null在Java中。

Boolean但是,A可以是null

如果boolean没有为a分配值(例如,类的成员),则false默认情况下为。


正确的解释,谢谢。
萨吉德·汗

9

唯一可以是anull的是非Primitiite。

boolean这只能承载TRUEFALSE是一个基元。内存中的TRUE/FALSE实际上是数字(01

0 =假

1 = TRUE

因此,当您实例化对象时,它将为null String str; // will equal null

另一方面,如果实例化图元,则会将其分配为默认值0。

boolean isTrue; // will be 0

int i; // will be 0


2
不幸的是Boolean,“ A Booleanwhich ...”中的大写字母。类型的变量boolean只能容纳truefalse,但是类型的变量可以Boolean容纳Boolean对象或null
约书亚·泰勒

7

在Java中,null仅适用于对象引用。由于boolean是原始类型,因此无法分配null

很难从示例中获取上下文,但是我猜想,如果hideInNav不在返回的对象中getProperties(),则您指示的(默认值?)将是false。我怀疑这是您看到的错误,false不等于null,因此hideNavigation获取空字符串吗?

在代码示例的上下文中,您可能会得到一些更好的答案。


6

boolean 是基本类型,因此不能为null。

其盒装类型Boolean可以为null。

该函数可能返回aBoolean而不是a boolean,因此将结果分配给Boolean-type变量将允许您测试是否为空。


4

null是分配给引用类型的值。null是保留值,指示引用与对象的实例不同。

Aboolean不是对象的实例。它是原始类型,例如intfloat。以相同的方式:int x的值为0boolean x值为false


同意 不是拼写错误的最佳时间!快速编辑:)
克里斯托弗

0

boolean是Java中的原始数据类型,并且原始数据类型不能像其他原始int,float等一样为null,如果未分配,则它们应包含默认值。

在Java中,只能将对象分配为null,这意味着相应的对象没有引用,因此在内存中不包含任何表示形式。

因此,如果要使用null作为对象,则应使用布尔类,该布尔类将原始布尔类型值包装在其对象内。

这些在Java中称为包装器类

例如:

Boolean bool = readValue(...); // Read Your Value
if (bool  == null) { do This ...}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.