哪一个是正确的?
if(dialog != null && dialog.isShowing){}
if(dialog.isShowing && dialog != null){}
if(dialog != null){
if(dialog.isShowing){}
}
答案 0 :(得分:12)
第一个和第三个都可以使用,因为它们不会处理过去的空检查。第二个可以生成NullPointerException
,因为它在您检查它是否为空之前引用dialog
。
答案 1 :(得分:5)
&& Java中的operator将在遇到false时立即停止评估(从左到右)。因此在
if(dialog != null && dialog.isShowing){}
如果对话框为空,则不会调用dialog.isShowing(),因此使用它是“安全的”。
此:
if(dialog != null){
if(dialog.isShowing){}
}
也可以正常工作,但通常会嵌套if-statements这样的语句,因为它会降低可读性。
答案 2 :(得分:2)
尽管一切都已得到回答,但为了完整起见: Java评估条件子句的方式称为Short circuit evaluation。这意味着一旦条件的结果被断言,将不会评估其他条款。
编辑:我的陈述实际上并不完全正确。使用||时,Java使用短路评估和&& (这是每个程序员使用的标准,因此我首先使用的是声明),但是您可以强制Java使用&amp ;;来评估所有语句。和|
答案 3 :(得分:1)
&&
运算符称为短路运算符。这意味着一旦结果已知。即,false && x
总是false
,它不会评估剩余的表达式。
对此的一种变化是使用||
短路,OR操作,如:
if(text == null || text.isEmpty())
答案 4 :(得分:0)
这是捷径逻辑。当第一个表达式为false时,Java将不检查第二个表达式,因为整个表达式为false definity。
答案 5 :(得分:0)
如果你想使用第二个,你可以使用try和catch,否则第一个和第三个是正确的。