初心者のJavaプログラミングクラスでこの質問がありますが、私の本では「|」が1つだけ見つかりません。オペレーターとしてを意味します。
質問は:
int j = 0;
if ((8 > 4) | (j++ == 7))
System.out.println("j = " + j);
j = 1ですか?
理由を説明。
この本では、OR演算子「||」について説明しています。例を示しますが、この単一の「|」は表示されません。演算子の意味は2つの間で変わりますか?
はい、意味が変わります。||は論理or演算子|ですが、はビット単位orです。
この演算子はビットレベルで動作するため(...)、と同じように短絡することはありません||。つまり、第1オペランドが、であってもtrue、第2オペランドが評価されます。
これらの演算子のandフォームではなく、 ||andフォームを使用する場合、Javaは右側のオペランドだけを評価する必要はありません。&&|&
Boolean b = true;
if(b || foo.test())
{
//we entered without calling test()
}
if(b | foo.test())
{
//we entered calling test()
}
|->これはビット単位のOR演算子であり、ビット単位の包括的OR演算を実行し、両方のオペランド(右と左)を実行します。
ビットごとのOR「|」オペランドのビットの一方または両方が1の場合、演算子は1を生成します。ただし、両方のビットが0の場合、この演算子は0を生成します。より正確にはOR "|" 演算子は、両方のオペランドの両方のビットが0の場合を除いて、すべての場合に1を返します。
if ((8 > 4) | (j++ == 7)) System.out.println("j = " + j);
ここ8>4に戻りtrue、j++ == 7戻りfalseます。したがって、if(true|false)ビット単位の演算子はtrueまたは1を返し、j++の後に1になったjの値を出力します。
演算子はビット単位の|ORですが、ブール変数でビット単位のORを使用するのはなぜでしょうか。
論理OR演算子(||)には、短絡と呼ばれる機能があります。これは、左側のオペランドがと評価された場合、trueそれ以上の処理は行われず、右側のオペランドも評価されないことを意味します。ただし、ビットごとのOR演算子|は常に両方のオペランドを評価し、ブールオペランドに適用される場合は、両方を評価してから、単純または結果に適用します。
あなたの場合、(j++ == 7)の結果に関係なく、は常に評価されます8 > 4。||これは、オペレーターでは発生しません。したがってj、1ずつインクリメントされ、プログラムの出力はです1。
jは0で初期化されますが、これ以降は割り当てられないため、答えは「いいえ」です。したがって、jの値は常に0のままです。