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时才计算其右侧操作数.
您可以使用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)
这里的问题是在你的代码中程序调用'null.length()',如果传递给函数的参数为null,则不会定义该函数.这就是抛出异常的原因.
| 归档时间: |
|
| 查看次数: |
156247 次 |
| 最近记录: |