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