2013-03-30 88 views
0

我有這樣的if語句NullPointerException異常發生的歷史

if((check1==null||!check1.isSolid())&&(check2==null)||!check2.isSolid()) 

它拋出一個空指針異常,因爲CHECK1或CHECK2是空的,但我不明白爲什麼它是這樣做的,因爲我檢查爲null條件之前我訪問該對象,如果該對象爲null爲什麼會麻煩檢查isSolid,因爲它已經是真的。

+2

試試這個:!IF((CHECK1 == NULL || check1.isSolid())&&((CHECK2 == NULL)|| CHECK2。 isSolid())) – Satya

+0

@Satya - 它看起來像你剛剛添加了一些空白。這不會有什麼區別。 –

+2

Stephen I更正了括號 – Satya

回答

5

你搞砸了你的括號。 Java將你的組聲明也像這樣:

((check1 == null || !check1.isSolid()) && check2 == null) || !check2.isSolid() 

如果check1nullcheck2,是null,第一條語句將評估爲true。當您的第二條語句移動時,會出現問題,因爲check2null,check2.isSolid()將通過NullPointerException

更改您的圓括號

(check1 == null || !check1.isSolid()) && (check2 == null || !check2.isSolid()) 
1

你混了括號。嘗試:

if((check1==null||!check1.isSolid())&&(check2==null||!check2.isSolid())) 
1

試試這個:

boolean check1_result = (check1 == null) ? true : !check1.isSolid(); 
boolean check2_result = (check2 == null) ? true : !check2.isSolid(); 

if (check1_result && check2_result) 
// do work...