我有這樣的if語句NullPointerException異常發生的歷史
if((check1==null||!check1.isSolid())&&(check2==null)||!check2.isSolid())
它拋出一個空指針異常,因爲CHECK1或CHECK2是空的,但我不明白爲什麼它是這樣做的,因爲我檢查爲null條件之前我訪問該對象,如果該對象爲null爲什麼會麻煩檢查isSolid,因爲它已經是真的。
我有這樣的if語句NullPointerException異常發生的歷史
if((check1==null||!check1.isSolid())&&(check2==null)||!check2.isSolid())
它拋出一個空指針異常,因爲CHECK1或CHECK2是空的,但我不明白爲什麼它是這樣做的,因爲我檢查爲null條件之前我訪問該對象,如果該對象爲null爲什麼會麻煩檢查isSolid,因爲它已經是真的。
你搞砸了你的括號。 Java將你的組聲明也像這樣:
((check1 == null || !check1.isSolid()) && check2 == null) || !check2.isSolid()
如果check1
是null
和check2
,是null
,第一條語句將評估爲true
。當您的第二條語句移動時,會出現問題,因爲check2
是null
,check2.isSolid()
將通過NullPointerException
。
更改您的圓括號
(check1 == null || !check1.isSolid()) && (check2 == null || !check2.isSolid())
你混了括號。嘗試:
if((check1==null||!check1.isSolid())&&(check2==null||!check2.isSolid()))
試試這個:
boolean check1_result = (check1 == null) ? true : !check1.isSolid();
boolean check2_result = (check2 == null) ? true : !check2.isSolid();
if (check1_result && check2_result)
// do work...
試試這個:!IF((CHECK1 == NULL || check1.isSolid())&&((CHECK2 == NULL)|| CHECK2。 isSolid())) – Satya
@Satya - 它看起來像你剛剛添加了一些空白。這不會有什麼區別。 –
Stephen I更正了括號 – Satya