在检查变量是否为空时,我看到建议使用的编码风格是 if(null == a)
。这种写法与 if(a == null)
有何区别?
在检查变量是否为空时,我看到建议使用的编码风格是 if(null == a)
。这种写法与 if(a == null)
有何区别?
没有。
有时人们会出于历史原因写成null == a
,因为这样可以避免在C语言中出现与拼写错误相关的错误。如果你写成:
if (a = NULL) { // note, only single =
...
a = NULL
,则该语句的结果为被赋的值(即NULL)。因此,与其检查a
的值,你可以将其设置为NULL,然后基本上检查if (NULL)
,这总是错误的。虽然这样编译可以通过,但几乎肯定不是你想要的。而这一切都是由于一个小错误=
与==
造成的。NULL
,那么if (NULL = a)
就会编译错误,因为你不能给表示NULL的常量赋值。if (null) {...
无法编译。(你仍然可以使用布尔变量产生相同的错误:if (someBooleanVar = someMethod())
。但这是一种相对罕见的模式。)==
比较,没有。详见JLS。对于equals
,a.equals(null)
将调用A类中定义的带有参数null
的equals
方法,而null.equals(a)
则无效。notNull
和nullable
都是引用类型的本地变量或字段:notNull==nullable
是与
相同的。nullable==notNull
notNull.equals(nullable)
nullable
为空,则不应抛出NullPointerException,但是nullable.equals(notNull)
会抛出异常。