java短路運算子和邏輯運算子的區別

u011167211發表於2015-01-26

/*
* 邏輯運算子——不論是什麼條件都要執行左右兩邊程式碼
* 短路運算子——我認為在底層就是利用物理電路的“並聯”和“串聯”實現的
* 原理很簡單,並聯電路代表短路或(||),串聯電路代表短路與(&&)。
*
* 並聯電路兩個開關只要有一個開關閉合,電路就會通。
* 類似於短路或(||),只要有其中一個為true(開關閉合)是就不必執行右邊的程式碼
* 並聯電路兩個開關其中有一個開關沒有閉合(false),電路不會通,要繼續執行右邊的程式碼。
*
* 串聯電路(&&)原理是必須是兩個開關都閉合電路才能通,所以原理可想而知咯!
* 左邊的開關閉合(true)仍需判斷右邊的開關是否閉合,所會執行右邊的程式碼。
* 左邊的開關沒有閉合(false) 不用執行右邊的程式碼。
* 因為左邊開關沒有閉合!右邊的開關無論是否閉合電路都不會通電,所以不執行右邊的程式碼。
*
* ——不知不覺突然回顧了那麼多年前的物理課知識,多少回憶湧上心頭,
* 記得那時候拆了好多家裡的電池,到處找小燈泡去連線電路,
* 有時候電路短路,弄的火光閃爍...
*/
int a = 0;
int b = 0;
int c = 0;
int d = 0;
/*
flag = true

邏輯或1
短路或0
邏輯與1
短路與1

flag = false

邏輯或1
短路或1
邏輯與1
短路與0
*/
boolean flag = false;

// | 和 || 的區別
if(flag | a++ > 10) {
System.out.println("邏輯或" + a);
}else {
System.out.println("邏輯或" + a);
}

if(flag || b++ >10) {
System.out.println("短路或" + b);
}else {
System.out.println("短路或" + b);
}
// & 和 && 的區別
if(flag & c++ > 10) {
System.out.println("邏輯與" + c);
}else {
System.out.println("邏輯與" + c);
}

if(flag && d++ >10) {
System.out.println("短路與" + d);
}else {
System.out.println("短路與" + d);
}

相關文章