NullPointer异常处理

时间:2014-07-25 23:28:53

标签: java

我一直在浏览一些他们谈论如何预防NPE的网站。在那里,我看到有人说使用null != object,但我不明白为什么。在java中执行以下操作有什么区别?

if(null != object) 

vs

if(object != null)

2 个答案:

答案 0 :(得分:4)

效果中两者没有区别。

然而,有一种思维方式,建议在操作员的左侧使用不可分配的(常数)值。因为这样可以降低意外分配的风险(这是从C编译器没有发出警告的时间开始的。)

// this is dangerous when misstyped
if (object = null) {

然而,首先编写null真正减少错误造成的影响的论点相当薄弱。特别是当不使用“==”但“!=”或“<”时。所以我想说,忽略这些建议。

但是有些情况下订单有助于防止NPE:

if ("string".equals(object))

在这种情况下,当“object”为空时,你不会得到NPE。

答案 1 :(得分:0)

  

在java中执行以下操作有什么区别?

  • 代码的含义没有区别。

  • 在代码安全性/健壮性方面没有区别。

在某些语言中,if (null == object)模式有助于避免此错误:

 if (object = null)

...意外地破坏了object变量的值。

但在Java中,if语句需要一个类型为boolean的条件表达式,object == null的类型不是布尔值。因此,特定的错误/拼写错误可以保证编译错误。


Digression ......

在经典Java中你似乎可能遇到'=='与'='的问题是:

 if (flag == true)

 if (flag == false)

然而,没有经验丰富的Java程序员会写出来。相反,他们会写:

 if (flag)

 if (!flag)

使用Java 5及更高版本,Boolean的自动装箱可能会让您陷入困境。但是,在这种情况下,你正在做一些不可取的事情。考虑一下:

 Boolean TRUE = true;
 Boolean TOO_TRUE = new Boolean(true);  // generates a new instance ...

 if (TRUE == TOO_TRUE) {  // should be TRUE.equals(TRUE)
     ....
 }

同样,有经验的程序员会避免不必要地使用盒装类型,并避免使用==测试它们。此外,您可能会从IDE或静态分析器(如FindBugs或PMD)收到此警告。