Java如何检查布尔值是否为空。

99

如何检查布尔值是否为空?如果我知道"hideInNav"是空的,我该如何停止其进一步执行?以下类似的代码似乎无法正常工作,但是为什么?

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

150

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

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

那我可以这样做吗:**Boolean hideInNav = parent.getProperties().get("hideInNav", false); if(hideInNav != null){ do something } ** - Delmon Young
1
是的,因为hideInNav持有一个对Boolean对象的引用,可以是null(没有分配引用)。因此,您可以检查引用是否为null - Eich
1
BooleanUtils.isTrue(java.lang.Boolean bool) 是我用来检查其状态的条件,因为 Boolean 可能为空。https://commons.apache.org/proper/commons-lang/javadocs/api-2.4/org/apache/commons/lang/BooleanUtils.html - Youness
1
没有使用Apache Commons: Boolean.TRUE.equals(xxx) - Eich

84
  • 在Java中,boolean类型不能为null
  • 然而,Boolean类型可以为null
  • 如果一个boolean类型未被赋值(例如类的成员变量),它将默认为false

1
正确的解释,谢谢。 - Sajid khan
对我来说这不正确,布尔值返回了空。 - صلي علي محمد - Atef Farouk
@صليعليمحمد-AtefFarouk,如果你不是在使用Java,或者你把Boolean错认为boolean了。 - undefined

12

唯一能为null的是非原始类型。

boolean只能容纳TRUEFALSE,它是原始类型。在内存中,TRUE/FALSE实际上是数字(01)。

0 = FALSE

1 = TRUE

因此,当您实例化一个对象时,它将为null。 String str; // 将等于null

另一方面,如果您实例化一个原始类型,它将被分配默认值0。

boolean isTrue; // 将是0

int i; // 将是0


2
“Boolean” 在 “A Boolean which…” 中的大写是不幸的。类型为 boolean 的变量只能保存 truefalse,但类型为 Boolean 的变量保存一个 Boolean 对象或 null - Joshua Taylor

8

boolean是一个原始类型,因此不能为null。

它的包装类型Boolean可以为null。

该函数可能返回一个Boolean而不是一个boolean,因此将结果赋值给一个Boolean类型的变量可以测试是否为null。


8
在Java中,`null`仅适用于对象引用;由于`boolean`是原始类型,因此它不能被赋值为`null`。
很难从你的示例获取上下文,但我猜测如果`getProperties()`返回的对象中没有`hideInNav`,那么你指定的(默认值?)将为`false`。我怀疑这就是您看到的错误,因为`false`不等于`null`,所以`hideNavigation`得到了空字符串?
如果您提供一些代码示例的更多上下文,可能会得到更好的答案。

4
null是指针类型变量的值。它是一个预留值,表示指针未指向任何对象实例。boolean不是对象的实例。这是一种基本类型,就像intfloat一样。类似于:int x的值为0boolean x 的值为false。请保留html标记。

同意,这不是犯拼写错误的最佳时间!迅速编辑 :) - christopher

0

boolean 是 Java 中的原始数据类型,与其他原始类型 int、float 等不同,原始数据类型不能为 null,如果未被赋值,则应包含默认值。

在 Java 中,只有对象可以被赋值为 null,这意味着相应的对象没有引用,因此在内存中不包含任何表示。

因此,如果您想使用对象作为 null,则应该使用 Boolean 类,它将原始 boolean 类型值包装在其对象中。

这些在 Java 中称为包装类

例如:

Boolean bool = readValue(...); // Read Your Value
if (bool  == null) { do This ...}

0
你可以使用`java.util.Objects`中的`Objects.equals()`方法。
if(Objects.equals(value1, value1){
 //your code
}

在文档中提到,这将检查空值和实际值。
Java文档中的实现:
Returns true if the arguments are equal to each other and false otherwise. 
Consequently, if both arguments are null, true is returned and if exactly one 
argument is null, false is returned. Otherwise, equality is determined by using 
the equals method of the first argument.

Params: a – an object 
        b – an object to be compared with a for equality
Returns: true if the arguments are equal to each other and false otherwise
See Also: Object.equals(Object)

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

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