繁体   English   中英

NullPointer异常处理

[英]NullPointer Exception handling

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

if(null != object) 

VS

if(object != null)

两者在效果上没有区别。

但是,有一种思路是建议在操作员的左侧使用不可分配的(常量)值。 因为这样可以减少意外分配的风险(这是从C编译器未对其进行警告的时间开始的)。

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

然而,首先写空值确实可以减少错误输入的影响的论点非常微弱。 特别是当不使用“ ==”而是“!=”或“ <”时。 所以我想说,忽略那些建议。

但是,在某些情况下,订购有助于预防NPE:

if ("string".equals(object))

在这种情况下,当“ object”为null时,您不会获得NPE。

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

  • 在代码含义上没有区别。

  • 在代码安全性/鲁棒性方面没有区别。

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

 if (object = null)

...这会意外破坏object变量的值。

但是在Java中, if语句需要条件表达式,其类型为boolean ,而object == null的类型不是布尔值。 因此,可以确保特定的错误/错字会导致编译错误。


离题...

您可能在经典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)获得此警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM