1. 序章

Javaでは、「AND」の言い方が2つあります。 しかし、どちらを使用しますか?

このチュートリアルでは、&と&&の違いを見ていきます。 そして、その過程でビット演算と短絡について学びます。

2. ビット単位の使用AND

ビット単位のAND(&)演算子は、2つの整数の各2桁を比較し、両方が1の場合は1を返し、それ以外の場合は0を返します。 

2つの整数を見てみましょう。

int six = 6;
int five = 5;

次に、これらの数値にビット単位のAND演算子を適用してみましょう。

int resultShouldBeFour = six & five;
assertEquals(4, resultShouldBeFour);

この操作を理解するために、各数値の2進表現を見てみましょう。

Binary of decimal 4: 0100
Binary of decimal 5: 0101
Binary of decimal 6: 0110

&演算子は、各ビットに対して論理ANDを実行し、新しい2進数を返します。

0110
0101
-----
0100

最後に、結果– 0100 – を10進数に戻すことができます– 4

テストJavaコードを見てみましょう。

int six = 6;
int five = 5;
int resultShouldBeFour = six & five;
assertEquals(4, resultShouldBeFour);

2.1. &withブール値の使用

また、ビット単位のAND( )演算子ブール値オペランド。 両方のオペランドがtrueの場合にのみtrueを返し、それ以外の場合はfalseを返します。

3つのboolean変数を取りましょう。

boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;

次に、変数trueBoolおよびanotherTrueBoolにビットごとのAND演算子を適用してみましょう。

boolean trueANDtrue = trueBool & anotherTrueBool;

そうすると、結果はtrueになります。

次に、trueBoolfalseBoolにビットごとのAND演算子を適用してみましょう。

boolean trueANDFalse = trueBool & falseBool;

この場合、結果はfalseになります。

テストJavaコードを見てみましょう。

boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;

boolean trueANDtrue= trueBool & anotherTrueBool;
boolean trueANDFalse = trueBool & falseBool;

assertTrue(trueANDtrue);
assertFalse(trueANDFalse);

3. 論理およびの使用

&と同様に、論理AND(&&)演算子は、2つのブール変数または式の値を比較します。 そして、それも戻ります真実両方のオペランドが真実 、それ以外の場合は、 間違い

3つのboolean変数を取りましょう。

boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;

次に、変数trueBoolおよびanotherTrueBoolに論理AND演算子を適用しましょう。

boolean trueANDtrue = trueBool && anotherTrueBool;

そうすると、結果はtrueになります。

次に、trueBoolfalseBoolに論理AND演算子を適用しましょう。

boolean trueANDFalse = trueBool && falseBool;

この場合、結果はfalseになります。

テストJavaコードを見てみましょう。

boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;
boolean anotherFalseBool = false;

boolean trueANDtrue = trueBool && anotherTrueBool;
boolean trueANDFalse = trueBool && falseBool;
boolean falseANDFalse = falseBool && anotherFalseBool;

assertTrue(trueANDtrue);
assertFalse(trueANDFalse);
assertFalse(falseANDFalse);

3.1. 短絡

それで、違いは何ですか? 良い、 &&演算子が短絡します。 これは、左側のオペランドまたは式が次の場合、右側のオペランドまたは式を評価しないことを意味します。 間違い

falseと評価される2つの式を考えてみましょう。

First Expression: 2<1
Second Expression: 4<5

式に論理AND演算子を適用する場合 2 <1 4 <5、 次に、最初の式のみを評価します 2 <1 と戻ります間違い。

boolean shortCircuitResult = (2<1) && (4<5);
assertFalse(shortCircuitResult);

3.2. 整数での&&の使用

&演算子はブール型または数値型で使用できますが、&&はブールオペランドでのみ使用できます。 整数オペランドで使用すると、コンパイルエラーが発生します。

int five = 2;
int six = 4;
int result = five && six;

4. 比較

  1. &演算子は常に両方の式を評価しますが、&&演算子は、最初の式が次の場合にのみ2番目の式を評価します。 真実
  2. &は各オペランドをビット単位で比較しますが、&&はブール値でのみ動作します

5. 結論

この記事では、ビット単位を使用しました 2桁のビットを比較して、新しい桁を生成する演算子。 また、論理を使用しました && 2つのブール値を比較する演算子。結果はブール値になります。

また、2つのオペレーターの間にいくつかの重要な違いがありました。

いつものように、このチュートリアルのコードはGitHubにあります。