通常,是有在「空變量檢查」中的字符串
if("x".equalsIgnoreCase(myStrVar))
和
if(myStrVar.equalsIgnoreCase("x"))
之間的差的第一不會引起零指示字例外,但第二個將如在這兩種情況下myStrVar
是否爲空?
通常,是有在「空變量檢查」中的字符串
if("x".equalsIgnoreCase(myStrVar))
和
if(myStrVar.equalsIgnoreCase("x"))
之間的差的第一不會引起零指示字例外,但第二個將如在這兩種情況下myStrVar
是否爲空?
是的,這是正確的。但是,這並不意味着你應該總是使用前者(「安全」)的版本。
如果您確信myStrVal
非空 - 意味着它爲空將表示一個錯誤 - 我可能會使用第二種形式。
if (x == 0)
而不是if (0 == x)
所以:
myStrVal
被以同樣的方式null作爲任何其他非「X」值進行鍼對第一myStrVal
存在使用第一種形式如果我的答案是正確的,答案是肯定的。 :)
他的問題是答案。你必須以問題格式回覆:) –
您的聲明,第二個版本將導致NullPointerException
,而第一個不會,是正確的。
很明顯,如果myStrVar == null
在第二種情況下將會產生NullPointerException
。您不能在null
上致電equalsIgnoreCase(String str)
,但您可以傳入null
作爲參數。
沒錯,因爲實現
public boolean equalsIgnoreCase(String anotherString) {
return (this == anotherString) ? true :
(anotherString != null) && (anotherString.count == count) &&
regionMatches(true, 0, anotherString, 0, count);
}
這是(尤達條件 - )規則的一個很好的例子:「你應該不斷的開始,以避免空指針取消引用」。
是的。爲什麼?當你試用它時發生了什麼? –
你爲什麼不在junit測試中試用? – hvgotcodes
你已經提出並回答了這個問題。 – Kal