我老闆說我應該用null == obj
,因爲它比obj == null
好,但他不記得爲什麼要這樣做。有沒有使用null == obj
的理由?
我覺得它不知何故......相反!(obj == null)vs(null == obj)?
在谷歌部分搜索後,我發現的唯一的事情是:
用C,它可以防止你不小心在一個條件結構輸入(OBJ = NULL)。
我老闆說我應該用null == obj
,因爲它比obj == null
好,但他不記得爲什麼要這樣做。有沒有使用null == obj
的理由?
我覺得它不知何故......相反!(obj == null)vs(null == obj)?
在谷歌部分搜索後,我發現的唯一的事情是:
用C,它可以防止你不小心在一個條件結構輸入(OBJ = NULL)。
不能意外鍵入obj = null
,而不是分配給null
obj
。但是,這是C時代的回憶,在java中,這是不可能的,因爲=
表達式返回賦值的右側。由於null
不是boolean
,編譯器會發出抱怨。
我會盡力向我的老闆解釋一次,證明它。如果他仍然不同意你,就去做吧。與老闆爭吵是一件小事。
一般來說,該語句是正確的,但有一個例外:如果'obj'是一個'Boolean',那麼'if(obj = null)'不會觸發編譯器錯誤 –
在Google的結果中,他(她)解釋說: '在C中可以寫if(obj = null)。 。 。 (當你打算寫== == null),並且你得到兩個錯誤的價格爲: 對象引用設置爲空 if之後的條件隱含地變爲假' –
@a_horse_with_no_name:Boolean是對象類型,它不能被設置爲空 – Dani
在Java中,沒有區別。
我更喜歡(obj == null),因爲它感覺更自然。
不是一個真正的答案,下次你應該評論它。 –
@XcodeDev這是一個相當簡單的公平問題,除非需要加載關於編譯器細節的切線信息? –
@XcodeDev:這是一個完美的答案。特別是考慮到整個問題是「(obj == null)vs(null == obj)?」,它有一個相當模糊的範圍。 –
我從來沒有聽說過這個,但它似乎是你給的理由是堅實的。我也覺得它倒退了,但除了「感覺」錯誤以外,它不應該有任何問題。我不認爲它會有任何性能優勢或類似的東西。
如果您確實在當前日期的java IDE中傳遞了if (obj=null)
或if (null=obj)
這樣的條件,則會將其突出顯示爲語法錯誤。此外,嘗試編譯會發出錯誤信號。
(obj==null)
和(null==obj)
都是可以接受的,它們都承擔相同的開銷,後者不產生任何性能。決定使用還是取決於採用的代碼風格,以保持不同班級的統一風格。
如果您編譯文件,if(null==obj)
,生成的字節碼是if_acmpne
並在if(obj==null)
情況下,它是ifnonnull
。現在在if_acmpne
兩個操作數彈出堆棧並檢查它們不相等(在這種情況下爲null
和obj
),而在ifnonnull
中,只有一個操作數會彈出並檢查它是否不爲空。從這看起來ifnonnull
更好,因爲它涉及到只有一個操作數的彈出。
我唯一知道的是你在Google上找到的東西。這可能是你的老闆受到C編程的限制。這就是說,我不會與之抗爭。 – Patrick87
我認爲這個想法是從C. –
持有的肯定是C的東西。我不會親自去,因爲它完全是倒退。 –