public class test023 {
public static void main(String[] args) {
int a = 1, b = 2;
if (a > 1 & b++ >2){ System.out.println("Hello"); }
System.out.println("a = " + a + ", b = " + b);
a = 1 ;
b = 2 ;
if (a > 1 && b++ > 2){ System.out.println("Hello"); }
System.out.println("a = " + a + ", b = " + b);
}
上面的結果如下:
a=1,b=3
a=1,b=2
雖然最後的結果都是 false,兩個if都看不到Hello,但是 b 的值卻有不同的變化。
當 a > 1 = false,「&」會繼續執行 b++,所以最後 b = 3
當 a > 1 = false,「&&」不會執行 b++ ,所以最後 b = 2
雖然左方運算的結果是false,已符合「and」邏輯,最後一定是false,但是「&」還是會執行右方的運算;
而「&&」發現左方運算的結果已經是false,就不需要再執行右方的運算。
但是如果把if的邏輯改為 a = 1 ,因為左方運算的結果為true,所以右方的運算無論如何都要執行,
才能知道最後的布林值是true或是false,所以兩個if最後 b = 3
「|」與「||」也是一樣的道理,測試如下:
public class test024 {
public static void main(String[] args) {
int a = 2, b = 2;
if (a > 1 | b++ >2){ System.out.println("Hello"); }
System.out.println("a = " + a + ", b = " + b);
a = 2 ;
b = 2 ;
if (a > 1 || b++ > 2){ System.out.println("Hello"); }
System.out.println("a = " + a + ", b = " + b);
}
}
因為左方的運算 a > 1 是true,對「or」邏輯而言,已經決定最後的結果是true,
但是「|」還是會執行右方的運算,所以 b = 3;而「||」的 b = 2
如果改為 a < 1,則右方運算必定會執行,才能決定最後的結果是true或false,所以兩個b都是3