将空值与对象进行比较,而不是将对象与空值进行比较,有何问题?

4

我刚刚发现我可以这样比较null和一个Object,

if(null != Object)

而不是像这样比较Objectnull,

Object != null

如果采用前一种方法,可能会出现什么问题?

那合法吗?如果不合法,为什么编译器会接受它?


3
你为什么觉得这样行不通? - Konrad Rudolph
1
没有什么问题,只是个人口味不同而已。有些人喜欢这样写,有些人则喜欢写成 object != null。就我个人而言,我觉得 Object != null 更易读一些。 - Kell
如果(null!= object),则将空对象与另一个对象进行比较。而比较的参考是null,而不是对象。 - Arif Nadeem
@mirroredAbstraction 不是。将空作为引用与另一个引用进行比较。..后面的部分是无意义的。 - user207421
5个回答

6

大多数人说Object != null是因为他们习惯了这种写法,所以更容易阅读。

我听到的最好的支持null != object的论据是避免糟糕的表达。例如,在if (var == 1)中捕捉拼写错误。

if (var = 1) // this is valid C
if (1 = var) // this is not valid C

6

有一点不对劲 - 可读性。如果你想写出干净的代码,你应该关注它将来被阅读的方式。它需要明显地表明它做了什么以及为什么它会执行某个操作。如果你把“对象”放在运算符右边,那么这样做就不够明显了。至少在我看来是这样的...


2

重要的是可读性。如果你能大声朗读代码并理解其含义,那么它将更容易被理解。第二个版本就像尤达语一样,“null不是对象”相比之下,“对象不为空”更容易理解。

同样地,给你的变量和方法起一个好的名字也很重要。

写可读性代码的好参考网站:http://www.cleancoders.com/


你是指Yoda-talk,也就是Yoda语法吗? - willDaBeast
正确的。http://jamiethompson.co.uk/web/2010/05/20/yoda-syntax-a-php-design-pattern-for-if-statements/ 它为什么是一个好主意进行了辩论...也许如果你是德国人.. - barsju

0

这是一样的。这几乎就像在说如果1 != 2。这是否意味着2 != 1


0

!= 运算符的行为与相等运算符 == 相同。

如果忽略表达式中的任何副作用,那么 (expr1 != expr2) 和 (expr2 != expr1) 是完全相同的。

如果 Object 是一个变量(或常量),那么 (null != Object) 同样有效(尽管可读性稍差一些)。


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