[英]NullPointerException on Null Check
我搞砸了下面的代码无法区分两个代码片段:
String Check=null;
if(Check!=null && Check.isEmpty()){
System.out.println("Get Inside");
}
上面的代码工作正常并打印消息。
if(Check==null && Check.isEmpty()){
System.out.println("get Inside")
}
此代码将抛出NullPointerException。无法区分此Code Please Help。
&&
运算符是短路的 ,如果没有必要,它不会评估右侧。 在这种情况下,有必要:
if(Check==null && Check.isEmpty()){
System.out.println("get Inside")
}
如果Check
为null
(并且就是这种情况),您将继续检查&&
之后的条件,并获得Check.isEmpty()
。 由于Check
为null
,它就像null.isEmpty()
,这是一个NEP。
为什么?
当两个表达式之间有&&
,如果第一个表达式为false,则答案将始终为false而另一方将不会被检查,但是当第一个为true
,您必须继续并检查另一方以了解是否所有表达式都应该被评估为true
或false
。
但是当你有:
if(Check!=null && Check.isEmpty()){
System.out.println("get Inside")
}
然后将无法到达右侧,因为检查它是多余的。 你已经false
,如果你在右边得到true
或false
没关系,结果将是false
因为这是一个AND
( FALSE && WHATEVER = FALSE )。 为什么要检查?
此链接可能对您有所帮助。
(我建议您遵循Java命名约定并使变量以小写开头)。
&&
表示首先评估左侧,如果为false
则表示整个表达式为false
。 如果左侧为true
,则评估右侧。 在你的情况下:
if(Check==null && Check.isEmpty())
如果Check
为null
,则接下来它会计算抛出NullPointerException
Check.isEmpty()
。
if(Check==null && Check.isEmpty())
如果Check真的等于null,那么在另一个条件中你只是说null.isEmpty
哪个会导致NullPointerException
因为&&
是无关紧要而且没有意义你需要||
代替
if(Check==null || Check.isEmpty()){
//no NullPointerException
System.out.println("get Inside")
}
首先让我告诉你logical OR(||) and logical AND(&&)
之间的区别。 使用logical OR
,如果第一个表达式为TRUE
, the second expression is not evaluated
; 这意味着如果任何一个表达式为TRUE,则满足条件并且流程进入循环。 但是在AND, all the expressions must satisfy to TRUE to satisfy the condition
情况下AND, all the expressions must satisfy to TRUE to satisfy the condition
。 如果任何一个表达式的计算结果为FALSE,则不满足条件。
还要记住, NPE(Null Pointer Exception) when we try to call methods upon variables whose value = null
,我们得到一个NPE(Null Pointer Exception) when we try to call methods upon variables whose value = null
。
所以在第一种情况下:
Check!= null:第一个条件为false,没有进一步处理为逻辑AND如果其中一个表达式为FALSE则返回FALSE。 不评估第二个表达式(Check.isEmpty或任何其他)。 没有NPE,因为我们没有调用任何null值的方法。
第二种情况:
满足第一个条件,因此评估第二个条件,它将NPE抛出为Check = null,并且我们在null值上调用方法。
希望你明白!
if(Check==null && Check.isEmpty()){
System.out.println("get Inside")
}
在上面,Check为null,因此它会查找下一个抛出NullPointerException的isEmpty条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.