如何在java中检查null值

在这段代码中。

public class Test { public static void testFun(String str) { if (str == null | str.length() == 0) { System.out.println("String is empty"); } else { System.out.println("String is not empty"); } } public static void main(String [] args) { testFun(null); } } 

我们将null值传递给函数testFun 。 编译正常,但在运行时给出nullPointerException

假设传递给testFun的实际参数的值是从某个进程生成的。 假设该进程错误地返回null值并将其提供给testFun。 如果是这种情况,如何validation传递给函数的值是否为null?

一个(奇怪的)解决方案可能是将forms参数分配给函数内的某个变量,然后对其进行测试。 但是如果有许多变量传递给函数,那可能会变得乏味且不可行。 那么,在这种情况下如何检查空值?

编辑:我错误地写了|| 而不是| 在if条件下。 现在生成运行时exception

编辑显示了正常工作的代码与不工作的代码之间的区别。

此检查始终评估两个条件,如果str为null则抛出exception:

  if (str == null | str.length() == 0) { 

而这(使用||而不是| )是短路的 – 如果第一个条件的计算结果为true ,则不评估第二个条件。

有关||的说明,请参见JLS的第15.24节 和二进制| 第15.22.2节 。 第15.24节的介绍是重要的一点:

条件或运算符|| 运算符就像| (§15.22.2),但仅在其左侧操作数的值为false时才计算其右侧操作数。

这里的问题是在你的代码中程序调用’null.length()’,如果传递给函数的参数为​​null,则不会定义该函数。 这就是抛出exception的原因。

问题是您使用的是按位或运算符: | 。 如果使用逻辑或运算符, || ,你的代码将正常工作。

也可以看看:
http://en.wikipedia.org/wiki/Short-circuit_evaluation
Java中&和&&的区别?

您可以使用StringUtils

 import org.apache.commons.lang3.StringUtils; if (StringUtils.isBlank(str)) { System.out.println("String is empty"); } else { System.out.println("String is not empty"); } 

看看这里: StringUtils.isBlank()vs String.isEmpty()

isBlank示例:

 StringUtils.isBlank(null) = true StringUtils.isBlank("") = true StringUtils.isBlank(" ") = true StringUtils.isBlank("bob") = false StringUtils.isBlank(" bob ") = false