我搞砸了下面的代码,无法区分这两个代码片段:
String Check=null;
if(Check!=null && Check.isEmpty()){
System.out.println("Get Inside");
}
以上代码运行良好并打印消息。
if(Check==null && Check.isEmpty()){
System.out.println("get Inside")
}
此代码将抛出 NullPointerException。无法区分此代码请帮助。
最佳答案
&&
运算符是一个短路,如果没有必要,它不会计算右侧。在这种情况下,有必要:
if(Check==null && Check.isEmpty()){
System.out.println("get Inside")
}
如果Check
为null
(确实如此),你将继续检查&&
之后的条件,你得到Check.isEmpty()
。因为 Check
是 null
,所以它就像是一个 NEP 的 null.isEmpty()
。
为什么?
当两个表达式之间有&&
时,如果第一个为false,则答案永远为false,另一方不会被检查,但是当第一个为true时
,您必须继续并检查另一侧,以了解是否所有表达式都应评估为 true
或 false
。
但是当你有:
if(Check!=null && Check.isEmpty()){
System.out.println("get Inside")
}
那么右侧将无法到达,因为检查它是多余的。你已经得到了false
,不管你在右边得到true
还是false
,结果都是 false
因为这是一个 AND
(FALSE && WHATEVER = FALSE)。那么为什么要检查呢?
This link可能对你有帮助。
(我建议您遵循 Java Naming Conventions 并使变量以小写字母开头)。
关于java - Null 检查时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16638694/