'a == null' 和 'null == a' 之间的区别是什么?(涉及IT技术)

11

在检查变量是否为空时,我看到建议使用的编码风格是 if(null == a)。这种写法与 if(a == null) 有何区别?

2个回答

34

没有。

有时人们会出于历史原因写成null == a,因为这样可以避免在C语言中出现与拼写错误相关的错误。如果你写成:

if (a = NULL) { // note, only single =
  ...

在C语言中,如果执行赋值语句a = NULL,则该语句的结果为被赋的值(即NULL)。因此,与其检查a的值,你可以将其设置为NULL,然后基本上检查if (NULL),这总是错误的。虽然这样编译可以通过,但几乎肯定不是你想要的。而这一切都是由于一个小错误===造成的。
如果你先放NULL,那么if (NULL = a)就会编译错误,因为你不能给表示NULL的常量赋值。
在Java中,没有必要这样做,因为if (null) {...无法编译。(你仍然可以使用布尔变量产生相同的错误:if (someBooleanVar = someMethod())。但这是一种相对罕见的模式。)
这种风格有时被称为“Yoda conditions”,因为它让人想起《星球大战》中Yoda奇怪的说话风格。

做得好,包括历史背景,并解释为什么它不再适用。 - Xynariz

1
对于==比较,没有。详见JLS。对于equalsa.equals(null)将调用A类中定义的带有参数nullequals方法,而null.equals(a)则无效。
然而,你也可以考虑其中一个比较方的值不一定是null值,而是可为空的情况。在这种情况下(notNullnullable都是引用类型的本地变量或字段:
notNull==nullable

是与

相同的。
nullable==notNull

但是。
notNull.equals(nullable)

如果nullable为空,则不应抛出NullPointerException,但是nullable.equals(notNull)会抛出异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接