1. ホーム
  2. java

[解決済み] Java の &= 演算子は & と && のどちらを適用するのでしょうか?

2022-03-11 23:33:39

質問

想定されること

boolean a = false;

するのはどうかと。

a &= b; 

は、以下と同等です。

a = a && b; //logical AND, a is false hence b is not evaluated.

という意味であり、一方では

a = a & b; //Bitwise AND. Both a and b are evaluated.

解決方法は?

Java言語仕様書より 15.26.2 複合代入演算子 .

という形の複合代入式。 E1 op= E2 は次のものと同等です。 E1 = (T)((E1) op (E2)) ここで T のタイプです。 E1 ただし E1 は一度だけ評価されます。

そこで a &= b; は、次のものと同等です。 a = a & b; .

(いくつかの用法では、タイプキャスティングは結果に違いをもたらしますが、この用法では bboolean で、タイプキャストは何もしません)。

そして、念のため。 a &&= b; は有効なJavaではありません。 有効なJavaではありません &&= 演算子を使用します。


との間に意味上の違いはほとんどありません。 a = a & b;a = a && b; . (もし b が変数または定数である場合、結果はどちらのバージョンでも同じになります。 意味上の違いがあるのは b は副作用のある部分式です。 その中で & の場合、副作用は常に発生します。 また && の値に応じて発生します。 a .)

パフォーマンス面では、「Security」の評価コストと、「Security」の評価コストとのトレードオフになります。 b の値のテストと分岐のコストです。 a への不要な代入を避けることができるため、潜在的な節約となります。 a . この分析は簡単ではありませんが,このような計算をするためのコストがなければ b が自明でない場合、2つのバージョンの性能差は小さすぎて、考慮する価値がない。