我的代碼是在下面一行用破一個NullPointerException:爲什麼在比較String和null時會出現NullPointerException?
if (stringVariable.equals(null)){
在此之前發言,我宣佈stringVariable並將其設置爲數據庫字段。
在本聲明中,我試圖檢測該字段是否具有null
的值,但不幸的是它打破了!
有什麼想法?
我的代碼是在下面一行用破一個NullPointerException:爲什麼在比較String和null時會出現NullPointerException?
if (stringVariable.equals(null)){
在此之前發言,我宣佈stringVariable並將其設置爲數據庫字段。
在本聲明中,我試圖檢測該字段是否具有null
的值,但不幸的是它打破了!
有什麼想法?
使用
stringVariable == null
要測試stringVariable
是否null
。
equals
方法(以及所有其他方法)要求stringVariable
不是null
。
在一個可能爲null的變量上調用一個方法永遠不明智,無論是equals()還是其他方法。這就是爲什麼人們通常不會是這樣的:
if (var != null && var.method(something)) {
// var.method() was true
} else {
// var is null or var.method is false
}
在你的特殊情況,這將是足夠用繩子可以支付退房Apache Commons StringUtils工作時做
if (stringVariable == null) {
}
。
它總是值得檢查一下apache commons庫,因爲它們有很多優化的工具(對於字符串,集合,日期等),這些工具往往比家庭寫的更好。
如果stringvariable
已經爲空,它不再作爲String
對象存在,所以它甚至不會有.equals
方法!因此,如果stringvariable
爲爲空,您真正在做的是null.equals(null)
,此時您將得到NullPointerException
,因爲null
沒有.equals()
方法。
很好的解釋@ Jama22 – 2015-03-26 11:46:58
儘管批准的評論確實有助於回答OP問題的「精神」(他們只是要求「任何想法」),但我相信這個答案更多地擴展了「爲什麼」幫助未來的讀者。 – Aterxerxes 2016-04-05 14:02:10
equals()方法不適用於null參數。
該方法需要有一個對象或字符串作爲參數。
public boolean equals(Object anObject)
由於null不是一個對象。 Is null an Object?。
另請參閱java 7文檔,其中說明當且僅當傳遞的對象不爲null時equals纔會給出結果。
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)
您對包含null的變量調用方法。 'equals()'不是特殊的,它仍然會拋出一個NPE。 – 2010-03-01 18:23:38