Java規則之條件語句中做空判斷時使用||和&&常犯的錯誤
阿新 • • 發佈:2018-12-23
錯誤程式碼示例:
public String bar(String string) { //error 1 if (string!=null || !string.equals("")) return string; //error 2 if (string==null && string.equals("")) return string; //error 3 if (string.equals(baz) && string != null) return string; //error 4 if (string.equals(baz) || string == null) return string; }
在Java中,邏輯運算子&&(短路與)和||(短路或)具體運算規則如下:
&&的運算規則:
i.當符號左邊表示式為false時,&&將直接返回false不在判斷符號右邊表示式的結果。
ii.當符號左邊表示式為true時,將繼續判斷符號右邊表示式,||的結果與右邊表示式結果一致。
||的運算規則:
i.當符號左邊表示式為true時,||將直接返回true不在判斷符號右邊的表示式結果。
ii.當符號左邊表示式為false時,將繼續判斷符號右邊表示式,&&的結果與右邊表示式結果一致。
根據&&和||的運算規則,下面我們來對以上錯誤例項進行分析。
error1:
例項中當string為null時,string!=null為false,將繼續判斷||右邊的表示式,執行!string.equals("")時,由於string為null,程式將丟擲NullPointerException。此處的||應該改成&&。
error2:
例項中由於是且運算當string為null,繼續執行string.equals("")時丟擲NullPointerException。應將&&改成||。
error3和error4例項中都是因為空判斷的位置錯誤,當string為空時會引起NullPointerException
正確例項如下:
public String bar(String string) {
//example1 ,||改成&&
if (string!=null && !string.equals(""))
return string;
//example2,&&改成||
if (string==null || string.equals(""))
return string;
//example3,改成(string != null)放在邏輯符號左邊判斷
if (string != null && string.equals(baz))
return string;
//example4 同上
if (string == null ||string.equals(baz))
return string;
}
廣告
【火線解碼】系列文章由專注於安卓程式碼掃描的火線產品團隊提供,火線官網:http://magic.360.cn
—— 用火線,守住程式碼底線!