[Java] 邏輯運算子 &, &&, |, || 的差異

Zhao Chen
2 min readJun 16, 2020

--

邏輯運算子包含

  • 邏輯或 |, ||
  • 邏輯且&, &&
  • 邏輯互斥 ^

那為什麼邏輯或及邏輯且有兩種不同運算子? | 與 || 及 & 與 && 又有什麼不同?

If you want to get an English version, please click here.

| 與 || 都是「邏輯或」運算子,差別在於如果 || 左邊的運算式可以決定結果,就不會運行右邊的運算式,比如:

輸出

使用 | 的運算結果:true
運算後 i 的內容:4
運算後 k 的內容:6
使用 || 的運算結果:true
運算後 i 的內容:3
運算後 k 的內容:6

在第 11 行中,由於|| 運算子左邊的邏輯判斷為 true,因此不需要看右邊的運算式就可以得知結果為 true,所以 i++ == j 這個運算式不會被執行,i 不會遞增。

同理於「邏輯且」,& 與 && 都是「邏輯且」運算子,在 && 左邊的運算式即可決定運算結果時,就不會運行右邊的運算式,比如:

輸出

使用 | 的運算結果:false
運算後 i 的內容:4
運算後 j 的內容:5
運算後 k 的內容:6
使用 || 的運算結果:false
運算後 i 的內容:4
運算後 j 的內容:5
運算後 k 的內容:5

在第 13 行中,由於&& 運算子左邊的邏輯判斷為 false,因此不需要看右邊的運算式就可以得知結果為 false,所以 k++ == l 這個運算式不會被執行,k 不會遞增。

|| 及 && 又稱為條件運算子(Conditional Operator),其取捷徑、不執行右邊運算式的行為又稱為短路(Short Circuit),所以又分別被稱為 Short-circuit OR 及 Short-circuit AND。

以上是關於邏輯運算子 - 或、且的一些練習,如果有任何建議,請讓我知道,謝謝 🙌 🙌

--

--

No responses yet