检查Object是否与其中一个字段的值同时为null

时间:2011-04-27 14:36:55

标签: java

哪一个是正确的?

if(dialog != null && dialog.isShowing){}

if(dialog.isShowing && dialog != null){}

if(dialog != null){
   if(dialog.isShowing){}
}

6 个答案:

答案 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,否则第一个和第三个是正确的。