2011-09-28 68 views
1

哪一個被推薦並用於檢查Object null-ness?Java中的對象null-ness檢查

null != Object 

Object != null 

等方式

null == Object 

Object == null 

...是它們之間有什麼區別嗎?

+1

沒有區別。我從來沒有聽說過其中一個選項會被正式推薦。 – home

+1

這個,或者它的一個小小的變化,已經在這裏和程序員中多次提出過.S http://programmers.stackexchange.com/questions/16908/doesnt-if-0-value-do-more-harm -than-good http://stackoverflow.com/questions/797162/is-there-any-difference-between-ifa-5-or-if5-a-in-c/797170 http://stackoverflow.com/questions/271561 /爲什麼做一個經常看到空變量而不是變量null-in-c – MatrixFrog

+0

爲什麼你把整個問題放在一個塊引用中?我更新了格式。 (並且刪除了稱呼和簽字,這裏的社區標準並不包括它們[我不同意這些標準,但那不是在這裏,也不在那裏。]) –

回答

5

(中)平等是可交換的,所以沒有區別。

從歷史上看,前者源於C,以避免意外地在條件語句中分配值,但主要適用於==而不是!=。此外Java要求在條件語句中的條件有一個布爾值,所以它可能出問題的唯一地方如今是

if (a == false) ... 

如果你不小心忽略=之一。我猜想一個罕見的情況(雖然可能不是那麼多,因爲學生經常在前兩個術語中寫出)。 Joonas還在評論中指出了另一個(更模糊的)案例。

+1

我更喜歡'null!= Object'因爲如果以後需要將其更改爲'==',則不會意外地寫入'Object = null'(如果'Object'的類型爲'Boolean',甚至可以在Java中編譯if語句)。 –

+0

如果'a'是一個'Boolean',不僅'if(a == null)',而且'if(a = null)'*也會編譯。在運行時,它試圖取消「空」,導致NPE。 –

+0

這就是我想說的»不小心忽略了一個'='«。通常,你不會故意寫條件語。 – Joey

1

它總是更具可讀性使用

Object != null 

因爲讀作「對象不爲空」,這是字面上的條件是什麼。 要交換兩個的唯一情況是,以避免意外使用

Object = null 

這將返回true,即使它是不期望的行爲,當你想說

Object == null 

但在現實不僅現代工具可以捕捉到這類錯誤,而且廣泛使用反過來實際上是任何需要閱讀代碼的人的障礙。

+0

'Object = null'是如何被捕獲的錯誤?這是一個完全有效的陳述。一臺機器無法猜測你的意思是'=='。 –

+1

機器可能無法確定,但是一些代碼分析工具會注意到程序員是否試圖在條件中分配值並吐出警告。當然,程序員仍然需要使用並注意這些工具。 – donnyton