DEV Community

codemee
codemee

Posted on

Java 的 & 也可以當邏輯運算器

在 Java 中, 大家都知道 & 可以做逐位元 (bit-wise) 的運算, 不過您可能不知道的是, 如果 & 兩邊都是 boolean 或是 Boolean 的運算元, 那 & 就會變成邏輯運算器, 例如:

jshell> int a = 10
a ==> 10

jshell> a == 11 & a++ == 11
$2 ==> false
Enter fullscreen mode Exit fullscreen mode

這個時候它的功能和 && 近似, 但是有一點關鍵的差異, 就是 & 兩邊的運算元都一定會執行, 然後才根據執行結果作邏輯運算。因此, 上述的例子中, 雖然左邊的運算元 a == 11fasle, 已經可以確認邏輯運算的結果, 但是右邊的運算元 a++ == 11 還是會運算, 如果檢查 a 的值, 就會發現變 11 了:

jshell> a
a ==> 11
Enter fullscreen mode Exit fullscreen mode

如果是使用 && 運算器, 它會走捷徑, 只要左邊運算元的計算結果可以決定整個邏輯運算的結果, 就不會計算右邊的運算元, 例如:

jshell> int b = 10
b ==> 10

jshell> b == 11 && b++ == 11
$5 ==> false

jshell> b
b ==> 10
Enter fullscreen mode Exit fullscreen mode

你會看到同樣的運算元, 但是改用 && 後, 因為左邊的 b == 11 會得到 false, 對 && 運算來說已經能夠確認結果一定是 false, 所以右邊的 b++ == 11 根本就不會執行, 最後 b 就仍然保留原值。

小結

本文的說明也同樣適用於 | 運算器, 許多 Java 教學都沒有提到這些位元運算器也可以當成邏輯運算器使用, 雖然並不建議這樣用, 不過若是看到別人的程式出現這種用法, 就不會覺得奇怪了。

Top comments (0)