2011-09-15 157 views
1

通常,是有在「空變量檢查」中的字符串

if("x".equalsIgnoreCase(myStrVar)) 

if(myStrVar.equalsIgnoreCase("x")) 

之間的差的第一不會引起零指示字例外,但第二個將如在這兩種情況下myStrVar是否爲空?

+1

是的。爲什麼?當你試用它時發生了什麼? –

+1

你爲什麼不在junit測試中試用? – hvgotcodes

+0

你已經提出並回答了這個問題。 – Kal

回答

7

是的,這是正確的。但是,這並不意味着你應該總是使用前者(「安全」)的版本。

如果您確信myStrVal非空 - 意味着它爲空將表示一個錯誤 - 我可能會使用第二種形式。

  • 我覺得它更可讀的(在我會寫if (x == 0)而不是if (0 == x)
  • 如果該值空以同樣的方式,它可能會更好去一鼓作氣盡早,而不是繼續當在一個意想不到的狀態

所以:

  • 如果你想爲特殊處理是零,那麼如果你想治療myStrVal被以同樣的方式null作爲任何其他非「X」值進行鍼對第一
  • 檢查,如果你想治療myStrVal存在使用第一種形式
  • null作爲bug,請使用第二種形式
1

如果我的答案是正確的,答案是肯定的。 :)

+0

他的問題是答案。你必須以問題格式回覆:) –

1

您的聲明,第二個版本將導致NullPointerException,而第一個不會,是正確的。

1

很明顯,如果myStrVar == null在第二種情況下將會產生NullPointerException。您不能在null上致電equalsIgnoreCase(String str),但您可以傳入null作爲參數。

1

沒錯,因爲實現

public boolean equalsIgnoreCase(String anotherString) { 
    return (this == anotherString) ? true : 
      (anotherString != null) && (anotherString.count == count) && 
      regionMatches(true, 0, anotherString, 0, count); 
} 

這是(尤達條件 - )規則的一個很好的例子:「你應該不斷的開始,以避免空指針取消引用」。