2016-02-24 11 views
4

我正在看一些我剛剛繼承並通過源代碼分析器運行的代碼。它指出,我在一個NullPointerException這裏的風險:爲什麼源代碼分析器聲稱NullPointerException可能會拋出,儘管檢查爲空

if(!(strLineData == null) && !(strLineData.isEmpty())) 

雖然這顯然是測試一個字符串(!它完成所有的地方)的一個笨方法,爲什麼會一個NullPointerException被拋出?如果strLineData爲空,它不會評估if語句的後半部分,對嗎?

+2

但是,如果strLineData爲空,則「!」使左側虛假。對??? – user1660256

+0

也許這個工具沒有考慮短路? –

+1

嘗試簡化說明,例如'if(strLineData!= null &&!strLineData.isEmpty())'看看你的分析器說什麼。 – radoh

回答

1

你說得對。看來,因爲這是由language specification提到的工具可能被竊聽:

的條件和操作& &就像&(§15.22.2),但評估其右邊的操作數只有當價值它的左手操作數是真的。

+0

謝謝!我知道我並不瘋狂。 :-) – user1660256

相關問題