当检查变量是否为null时,我看到建议的编码样式为if(null == a)
。这与if(a == null)
之间有什么区别?
答案 0 :(得分:28)
没有。
由于历史原因,人们有时会写null == a
,因为它消除了C中与拼写相关的错误的可能性。如果你要写:
if (a = NULL) { // note, only single =
...
在C中,然后执行赋值语句a = NULL
,语句的结果是赋值(即NULL)。因此,不是检查a
的值,而是将其设置为NULL,然后基本上检查if (NULL)
,这始终为false。这编译,但几乎肯定不是你想要的。而这一切都归因于=
与==
的小错误。
如果先放置NULL
,则if (NULL = a)
是编译错误,因为您无法为NULL表示的常量赋值。
在Java中,没有必要这样做,因为if (null) {...
不能编译。 (您可以在Java中仍然存在与布尔变量相同的错误:if (someBooleanVar = someMethod())
。但这是一种相对罕见的模式。)
这种风格有时被称为“Yoda conditions”,因为它让人想起尤达在“星球大战”中古怪的说话风格。
答案 1 :(得分:1)
对于==
比较,没有。有关详细信息,请参阅JLS。对于equals
,a.equals(null)
将使用参数equals
调用A类中定义的null
方法,而null.equals(a)
将无效。
但是,您也可以考虑比较的一方不一定是空值,而是可以为空。在这种情况下(notNull
和nullable
都是局部变量或引用类型的字段:
notNull==nullable
与
相同nullable==notNull
但
notNull.equals(nullable)
不应抛出NullPointerException,而如果nullable.equals(notNull)
为null,nullable
将抛出一个。