2010-03-01 32 views
10

我的代碼是在下面一行用破一個NullPointerException:爲什麼在比較String和null時會出現NullPointerException?

if (stringVariable.equals(null)){ 

在此之前發言,我宣佈stringVariable並將其設置爲數據庫字段。

在本聲明中,我試圖檢測該字段是否具有null的值,但不幸的是它打破了!

有什麼想法?

+0

您對包含null的變量調用方法。 'equals()'不是特殊的,它仍然會拋出一個NPE。 – 2010-03-01 18:23:38

回答

28

使用

stringVariable == null 

要測試stringVariable是否null

equals方法(以及所有其他方法)要求stringVariable不是null

5

在一個可能爲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庫,因爲它們有很多優化的工具(對於字符串,集合,日期等),這些工具往往比家庭寫的更好。

9

如果stringvariable已經爲空,它不再作爲String對象存在,所以它甚至不會有.equals方法!因此,如果stringvariable爲空,您真正在做的是null.equals(null),此時您將得到NullPointerException,因爲null沒有.equals()方法。

+0

很好的解釋@ Jama22 – 2015-03-26 11:46:58

+0

儘管批准的評論確實有助於回答OP問題的「精神」(他們只是要求「任何想法」),但我相信這個答案更多地擴展了「爲什麼」幫助未來的讀者。 – Aterxerxes 2016-04-05 14:02:10

相關問題