在这段代码中。
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
并打印"String is empty"?
假设实际参数的值是由某个过程生成的。假设该过程错误地返回了一个null
值,并被输入到testFun中。如果是这种情况,如何验证传递给函数的值是否为null?
一种(奇怪)的解决方案可能是在函数内部将形式参数赋值给某个变量,然后进行测试。但是如果有许多变量传递到函数中,那可能变得繁琐和不可行。那么,在这种情况下如何检查null值?
str == null
,则不会进入if
的那一部分。 - Keppil||
作为短路运算符,一旦评估为真,它就不会到达下一部分。由于使用了|
,因此评估了null.length,这导致了异常的产生。 - Shades88