1. 程式人生 > >Java規則之條件語句中做空判斷時使用||和&&常犯的錯誤

Java規則之條件語句中做空判斷時使用||和&&常犯的錯誤

錯誤程式碼示例:

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("")時,由於stringnull,程式將丟擲NullPointerException。此處的||應該改成&&

error2:

         例項中由於是且運算當string為null,繼續執行string.equals("")時丟擲NullPointerException。應將&&改成||

error3error4例項中都是因為空判斷的位置錯誤,當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

—— 用火線,守住程式碼底線!