[英]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.