2011-07-30 77 views
33

我老闆說我應該用null == obj,因爲它比obj == null好,但他不記得爲什麼要這樣做。有沒有使用null == obj的理由?
我覺得它不知何故......相反!(obj == null)vs(null == obj)?

在谷歌部分搜索後,我發現的唯一的事情是:

用C

,它可以防止你不小心在一個條件結構輸入(OBJ = NULL)。

+7

我唯一知道的是你在Google上找到的東西。這可能是你的老闆受到C編程的限制。這就是說,我不會與之抗爭。 – Patrick87

+2

我認爲這個想法是從C. –

+2

持有的肯定是C的東西。我不會親自去,因爲它完全是倒退。 –

回答

31

不能意外鍵入obj = null,而不是分配給nullobj。但是,這是C時代的回憶,在java中,這是不可能的,因爲=表達式返回賦值的右側。由於null不是boolean,編譯器會發出抱怨。

我會盡力向我的老闆解釋一次,證明它。如果他仍然不同意你,就去做吧。與老闆爭吵是一件小事。

+10

一般來說,該語句是正確的,但有一個例外:如果'obj'是一個'Boolean',那麼'if(obj = null)'不會觸發編譯器錯誤 –

+0

在Google的結果中,他(她)解釋說: '在C中可以寫if(obj = null)。 。 。 (當你打算寫== == null),並且你得到兩個錯誤的價格爲: 對象引用設置爲空 if之後的條件隱含地變爲假' –

+0

@a_horse_with_no_name:Boolean是對象類型,它不能被設置爲空 – Dani

11

在Java中,沒有區別。

我更喜歡(obj == null),因爲它感覺更自然。

+0

不是一個真正的答案,下次你應該評論它。 –

+1

@XcodeDev這是一個相當簡單的公平問題,除非需要加載關於編譯器細節的切線信息? –

+4

@XcodeDev:這是一個完美的答案。特別是考慮到整個問題是「(obj == null)vs(null == obj)?」,它有一個相當模糊的範圍。 –

1

我從來沒有聽說過這個,但它似乎是你給的理由是堅實的。我也覺得它倒退了,但除了「感覺」錯誤以外,它不應該有任何問題。我不認爲它會有任何性能優勢或類似的東西。

1

如果您確實在當前日期的java IDE中傳遞了if (obj=null)if (null=obj)這樣的條件,則會將其突出顯示爲語法錯誤。此外,嘗試編譯會發出錯誤信號。

(obj==null)(null==obj)都是可以接受的,它們都承擔相同的開銷,後者不產生任何性能。決定使用還是取決於採用的代碼風格,以保持不同班級的統一風格。

10

如果您編譯文件,if(null==obj),生成的字節碼是if_acmpne並在if(obj==null)情況下,它是ifnonnull。現在在if_acmpne兩個操作數彈出堆棧並檢查它們不相等(在這種情況下爲nullobj),而在ifnonnull中,只有一個操作數會彈出並檢查它是否不爲空。從這看起來ifnonnull更好,因爲它涉及到只有一個操作數的彈出。

參考文獻:http://www.artima.com/underthehood/flowP.html

相關問題