我一直在浏览一些他们谈论如何预防NPE的网站。在那里,我看到有人说使用null != object
,但我不明白为什么。在java中执行以下操作有什么区别?
if(null != object)
vs
if(object != null)
答案 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)收到此警告。