如何检查java中的空值

Sha*_*s88 35 java nullpointerexception

在这段代码中.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我们将null值传递给函数null.编译很好,但testFun在运行时给出.

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

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

编辑:错误地写了|| 而不是| 在if条件下.现在生成运行时异常

Jon*_*eet 64

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

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

 if (str == null | str.length() == 0) {
Run Code Online (Sandbox Code Playgroud)

而这(使用||而不是|)是短路的 - 如果第一个条件评估为true,则不评估第二个条件.

有关二进制文件的说明,请参阅JLS的第15.24 ||,以及第15.22.2节|.第15.24节的介绍是重要的一点:

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


Roh*_*eja 6

您可以使用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");

}
Run Code Online (Sandbox Code Playgroud)

也可以在这里查看:StringUtils.isBlank()vs String.isEmpty()

isBlank 例子:

StringUtils.isBlank(null)      = true
StringUtils.isBlank("")        = true  
StringUtils.isBlank(" ")       = true  
StringUtils.isBlank("bob")     = false  
StringUtils.isBlank("  bob  ") = false
Run Code Online (Sandbox Code Playgroud)


phe*_*hew 5

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

  • 它永远不会到达`if` if?str == null`的那一部分. (2认同)
  • 在if(str == null || str.length()== 0)条件下,如果第一部分为false,则永远不会评估第二部分.如果你想要评估第二部分,你可以把它写成(str == null | str.length()== 0),这样你就可以得到一个nullpointer.在这种情况下,不明白为什么你会想要它,但在某些情况下,这可能是有益的. (2认同)
  • 实际上确实如此.|| 很懒,但他用的是 这将评估双方 (2认同)