Java中邏輯&和短路&&的區別是:邏輯&需要判斷&符號左邊和右邊的兩個條件,而短路&&,如果&&符號左邊的是真,才會判斷右邊;如果&&符號左邊為假,則走else。
eg.
public class Demo { public static void main (String [] args) { int a = 4; int b = 3; int c = 0; if(a<b & b/c == 0) { // 報錯 System.out.println("nihaoma"); }else { System.out.println("wohenhao"); } if(a>b & b/c == 0) { // 報錯 System.out.println("nihaoma"); }else { System.out.println("wohenhao"); } if(a>b && b/c == 0) { // 報錯 System.out.println("nihaoma"); }else { System.out.println("wohenhao"); } if(a<b && b/c == 0) { System.out.println("nihaoma"); }else { System.out.println("wohenhao"); // 輸出“wohenhao” } } }
上述代碼中,因為第一,第二段輸出里面,因為是邏輯&,所以&符號左邊和右邊的條件都要判斷,其中有一個是假,就不成立。而其中b/c,因為除數是0,,所以輸出時報錯。第三、第四段輸出,因為是短路&&,所以只要&&號左邊的為假,就會走else,&&符號左邊的為真,就會判斷第二個條件。所以第三段輸出報錯,第四段輸出else中的打印結果。
eg.
public class Demo { public static void main (String [] args) { int a = 4; int b = 3; int c = 0; if(a<b & b/c == 0) { // 報錯 System.out.println("nihaoma"); }else { System.out.println("wohenhao"); } if(a>b | b/c == 0) { // 報錯 System.out.println("nihaoma"); }else { System.out.println("wohenhao"); } if(a>b || b/c == 0) { System.out.println("nihaoma"); // 輸出"nihaoma" }else { System.out.println("wohenhao"); } if(a<b || b/c == 0) {// 報錯 System.out.println("nihaoma"); }else { System.out.println("wohenhao"); } } }
上述代碼中,第一第二個輸出,因為是邏輯|,所以兩邊都要判斷,有一個報錯,即報錯。第三第四個輸出中,因為是短路||,所以第三段中,第一個條件為真,就不會繼續判斷第二個條件;第四段中,因為第一個為假,需要判斷把第二個,因為第二個報錯,所以結果報錯。