2012-12-05 90 views
2

我看到這個有很多在別人的代碼:空的檢查條件都這樣寫的:是否有任何理由在java中使用null == value條件?

if (null == value) 

而不是

if (value == null) 

我不認爲有任何理由有null在Java中位於運算符之前。這樣做有什麼好處嗎?這僅僅是一個C++程序員錯誤地將他的技能應用於Java的案例,還是我錯過了一些重要的東西?

+2

你有示例代碼?我真的不明白這個問題...抱歉 –

+1

@MatiasCaamaño'if(null == value)'而不是'if(value == null)' – Vulcan

+0

這聽起來像是http://stackoverflow.com/questions/的重複3021195/which-is-more-effective-if-null-variable-or-if-variable-null – NPE

回答

11

這是一個所謂"Yoda Conditions" (item #1)的情況。雖然可以在C/C++中合理化它們,但沒有理由在Java中使用它們。

在C/C++中,任何類型的表達式都可以寫入if s和while s。寫

if (var = NULL) // No compile-time error in C/C++ 

代替

if (var == NULL) 

是新手中一個常見的錯誤。尤達條件按說補救措施來解決這個問題,在「Yodifying」你的代碼的成本:C/C++會捕獲分配到NULL

if (NULL = var) // Compile-time error 

但「逆轉」 NULL檢查都正常:

if (NULL == var) 

由於Java認爲if,whilefor控制塊內部的非布爾表達式是錯誤,因此它會捕獲var = null而不是var == null,從而觸發錯誤。因此,沒有理由通過「讚美」你的表達來放棄可讀性。

0

這通常是開發人員的母語的人工產物。有些語言的規則使null == valuevalue == null更自然。在語法上,它們與Java相同。

+0

不,它不是因爲「null == value」更自然而退出語言的原因。它只是一個編碼gudeline,爲了避免意外地忽略一個「=」而不是正確的「==」 – AlexWien

0

不是檢查可能意味着空指針異常。

按此順序放置它可以幫助您不會將=(賦值)與==(相等)混淆。

if (a = null) 

if (a == null) 

將編譯;然而,你可能想要第二個而不是第一個。

如果它們翻轉,

if (null = a) 

將無法​​編譯,而

if (null == a) 

將編譯。

因此,您可以在編譯時捕獲一個小的,難以發現的錯誤。

+0

的確,但這並不回答關於'null == value'和'value之間區別的(解釋的)問題== null。 – Vulcan

+0

編輯我的答案...長壽,繁榮。 – rajah9

+0

現在體面的回答,但'if(a = null)'不會編譯(除非'a'是一個布爾值,但很少被設置爲null)。 – Vulcan

2

比方說,你只需要打印一個字符串的內容,如果它比20再你會做到這一點:

if (str != null && str.length() > 20) { 
    System.out.println(str); 
} 

離開了這個str != null &&會拋出NPE如果str實際上是null

如果你指的

if (str == null) { ... } 

if (null == str) { ... } 

有沒有區別。

0

只是爲了確保你沒有爲例如value = null分配一個值,如果你忽略==所以這段代碼會很好的編譯,只能在運行時才能識別,但是如果你這樣嘗試,編譯。

+0

這是不正確的...無論如果塊我不會編譯與此 – bharal

+0

@bharal null =值將不會編譯,它會拋出編譯器錯誤 –

1

答案是否定的!
有絕對不需要if (null == value)而不是if (value == null)在java!

if (null == value)的檢查有點奇怪,至少在java中,來自C和C++中的代碼指導原則,這很有意義。

我喜歡更多if (value == null)這是更好的可讀性。

的原因是爲了避免C/C++,而不是正確的if (value == null)

如果使用if (null = value)的C/C++編譯器會拋出異常錯誤if (value = null)

但是在java中,即使是if (value = null)也會是一個語法錯誤。
所以不要使用(null == value)在java中

+0

我不認爲這是真的...在一個'if'塊你會有一個編譯器錯誤值= null - 也就是說,如果(value = null)不會編譯 – bharal

+0

我更新了,而你寫了你的評論。 – AlexWien

1

它可以讀取更好一些次

if(null == someFunction(someParameter, anotherParameter)) 

VS

if(someFunction(someParameter, anotherParameter) == null) 
相關問題