if语句检查是否为null,但仍然抛出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);

}

}

我们null向函数传递值testFun。可以正常编译,但是NullPointerException在运行时提供了一个我没想到的。为什么它引发异常,而不是评估if条件true并显示“字符串为空”?


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

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

回答:

所做的修改恰好显示了有效代码与无效代码之间的区别。

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

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

而这(使用||代替|)是 短路的 -如果第一个条件求值为true,则第二个条件不求值。

有关JLS的说明,请参见JLS的15.24

节;有关二进制文件||,请参见15.22.2节|。不过,第15.24节的简介很重要:

条件或运算符|| 运算符就像| (第15.22.2节),但仅当其左侧操作数的值为false时才评估其右侧操作数。

以上是 if语句检查是否为null,但仍然抛出NullPointerException 的全部内容, 来源链接: utcz.com/qa/405885.html

回到顶部