java碎片整理之Boolean變數和null的運算報空指標異常
阿新 • • 發佈:2018-12-14
把Boolean變數的初始為null,在與其他Boolean變數運算時,有以下情況:
1、||運算時,如果Boolean變數值為true並且在左邊,變數值為null型別的在右邊,編譯不會報錯,執行時不會報空指標異常,會輸出左邊的Boolean變數值true,如果Boolean變數值為false並且在左邊,變數值為null型別的在右邊,編譯不會報錯,執行時會報空指標異常,原因是運算時自左向右,如果左邊是true,||短路,則不會往由繼續運算,左邊為false會繼續運算||右邊的null,這時報空指標異常,如圖:
bl1=true;bl2=null;輸出結果true。
bl2=false;執行時空指標異常
2、||運算時,Boolean變數值為null的變數在||左邊,無論右邊變數值為true還是false,執行時都會報空指標異常。時間關係不貼圖了,道理很簡單,只要將null加入||運算就會報空指標,右邊是什麼值都沒用。
3、&&運算時,false在&&左邊,null在右邊,輸出false;true在&&左邊,null在右邊,執行時空指標;null在左邊,右邊無論是true還是false,執行時都空指標。
總結以此類推可以知道,|和&有null參與運算時,一定會報空指標,因為這兩個運算子非短路運算子,||和&&有null參與運算存在不報空指標的情況是因為如果值符合要求會有短路情況出現,不會繼續運算右邊。