2011-02-13 77 views
4

嗨 在我们公司,他们遵循严格的与空值比较的规则。当我代码 if(variable!= null) in code review我收到此评论后将其更改为if(null!= variable)。上述代码是否有性能问题? 如果有人解释高度赞赏。if(null!=变量)为什么不是if(变量!= null)

在此先感谢

+0

不应该有任何性能增益或任何方式退化afaik,猜测这只是他们喜欢做什么。 – esaj 2011-02-13 15:45:14

+0

这种编码风格被称为“尤达条件”,如果你搜索它,你会发现很多例子和讨论。 – Cephalopod 2011-02-13 16:24:52

+0

可能的重复http://stackoverflow.com/questions/271561/why-does-one-often-see-null-variable-instead-of-variable-null-in-c – 2011-02-13 16:59:46

回答

2

这与性能无关。它用于防止您意外指定而不是比较。分配null = var将没有任何意义。但在Java var = null也不会编译,所以转换它们的规则不再有意义,只会使代码变得不可读。

3

没有性能上的差异 - 原因是,如果你习惯了编写(null == somevar),而不是(somevar == null),那么你将永远不会意外地使用单等号,而不是两个,因为编译器不会允许它,它会允许(somevar = null)。他们只是将其延伸至!=以保持一致。

我个人更喜欢(somevar == null)我自己,但我看到他们来自哪里。

10

我没有看到遵循这个约定的好处。在C,其中布尔类型不存在,就写

if (5 == variable) 

而不是

if (variable == 5) 

,因为如果你忘记了eaqual标志之一,你最终

if (variable = 5) 
是非常有用的

其中5分配给变量,并总是评估为真。但在Java中,布尔值是一个布尔值。并且!=,根本没有理由。

一个很好的建议,虽然是写

if (CONSTANT.equals(myString)) 

而不是

if (myString.equals(CONSTANT)) 

,因为它有助于避免NullPointerException异常。

我的建议是要求为规则的理由。如果没有,为什么要遵循它?它无助于可读性。

3

这是旧C编码标准的“遗留”。

表达式if (var = null)可以毫无问题地编译。但它实际上将值null分配给变量,从而做了完全不同的事情。这是C程序中非常烦人的bug的来源。

在Java中,表达式不能编译,因此它比其他任何东西都更传统。它不会有任何目的(除了编码风格偏好)