2013-04-10 179 views
45

如何检查布尔值是否为空?所以如果我知道“hideInNav”为空。如何停止 它进一步执行?像下面的东西似乎不工作,但为什么?Java检查布尔值是否为空

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

回答

72

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

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

感谢@Eich但如果我想使用空值,您将如何使用类“布尔”?你有任何代码示例?对不起,超新的这个。 – 2013-04-10 22:39:46

+0

在这个具体的例子中,布尔hideInNav = parent.get ..... – p91paul 2013-04-10 22:42:26

+0

没问题Delmon,每个人都是初学者:)。 p91paul为您提供了正确的代码,以便您可以检查空值:)。我还添加了一个例子。 – Eich 2013-04-10 22:45:02

26

boolean不能在Java null

A Boolean,但是,可以是null

如果一个boolean没有赋值(比如说一个类的成员),那么默认情况下它将是false

3

null是分配给参考类型的值。 null是保留值,表示引用不像对象的实例。

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

+0

同意。不是拼写错误的最佳时机!快速编辑:) – christopher 2013-04-11 09:29:52

5

boolean是原始类型,因此不能为空。

其盒装类型Boolean可以为空。

函数可能会返回Boolean而不是boolean,因此将结果分配给Boolean类型的变量将允许您测试无效性。

6

在Java中,null仅适用于对象引用;由于boolean是原始类型,因此不能分配null

很难从你的例子获取上下文,但我猜,如果hideInNav不是由getProperties(),返回的对象(默认值?)你已经表示将false。我怀疑这是你看到的错误,因为false不等于null,所以hideNavigation得到空字符串?

对于代码示例,您可能会得到一些更好的答案。

7

唯一可以是null的东西是非原始的。

A boolean哪些只能容纳TRUEFALSE是原始的。在存储器中的TRUE/FALSE实际上是数字(01

0 = FALSE

1 = TRUE

因此,当你实例化对象将是空 String str; // will equal null

另一方面,如果你立即一个原语它将被分配到0默认。

boolean isTrue; // will be 0

int i; // will be 0

+1

“布尔”中的布尔值的大写字母“......”是不幸的。 'boolean'类型的变量只能保存'true'和'false',但是一个'Boolean'类型的变量保存一个'Boolean'对象或'null'。 – 2013-06-24 17:09:59

-6

其实原始数据类型的默认值是空的局部变量。

+1

对不起,但这是不正确的。原始数据类型始终具有非空值。 – Eich 2015-08-10 10:27:31

+1

默认值是'false',不管它是否是本地的,都与任何事情无关。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html – 2017-03-11 14:35:49