有什么不对空与对象进行比较,而不是与空

问题描述:

对象我才发现,我可以用Object这样比较null有什么不对空与对象进行比较,而不是与空

if(null != Object)

,而不是null比较Object ,像

Object != null 

如果使用前一种方法会出现什么问题?

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

+3

为什么你期望这不起作用? – 2012-04-20 10:44:00

+1

它没有错,只是一个真正的品味问题。有些人喜欢这个,其他人喜欢object!= null。我个人觉得Object!= null更易于阅读。 – Kell 2012-04-20 10:44:32

+0

如果(NULL!=对象),null作为一个对象与另一个对象进行比较.. 和对比参考是对象 – 2012-04-20 10:48:42

有一件事错了 - 可读性。如果你想写一个干净的代码,你应该关心它将来被阅读的方式。它必须是显而易见的,它做了什么以及它为什么做某件事。如果您将“对象”放在评估的右侧,那么您真的在做什么变得不那么明显。嗯,至少在我看来......

这是一样的。这几乎就像是说,如果1 != 2。这是暗示2 != 1

大多数人表示Object != null,因为这是他们所习惯的方式,所以它更容易阅读。

我听到null != object最好的反驳是避免不良表情。例如到拾取在if (var == 1)

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

!=操作员输入错误的行为就如同试验相等运算==

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

如果对象是一个变量(或恒定),然后(null != Object)是一样有效的(虽然有点少可读)。

两者是等价的,但null != object是从语言的旧的做法,即它是有效的写if (object = null)和意外 null分配对象。这是防止事故发生的后卫。

+0

在Java中,第二个不会编译。 – 2012-04-20 11:15:43

这只是一个可读性问题。如果你可以大声朗读你的代码,这很有意义,它更容易理解。第二个版本是像尤达大师对话。“null是不是对象。”比较“的对象不是空” ..

这同样适用于给你的变量和方法的好名字。

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

+0

你的意思是Yoda-talk,就像在Yoda Syntax中一样? – willDaBeast 2012-04-20 11:29:04

+0

对.. http://jamiethompson.co.uk/web/2010/05/20/yoda-syntax-a-php-design-pattern-for-if-statements/只有它认为为什么,这是一个好主意是...也许如果你的德语.. – barsju 2012-04-20 12:40:43