2011-02-13 73 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中,表達式不能編譯,因此它比其他任何東西都更傳統。它不會有任何目的(除了編碼風格偏好)