数週間前に同様の質問を設定しましたが、 Java演算子の優先順位に関するあいまいさと混乱を解消することはできません。今回はこのコードの断片があります:
int mask = 0;
int count = 0;
if( ((5<7) || (++count < 10)) | mask++ < 10 )
mask = mask + 1;
System.out.println(mask + " " + count);
結果は(私には予期せず):20です。
さらに、コンパイラーは、式(++ count <10)のみに下線を引く警告を提供します:デッドコード。
ただし、次のいずれかの方法でコードを実行すると思います。
1)| ||よりも優先順位が高いため、式の前後に括弧があったと見なされます((++ count <10)| mask ++ <10)。このようにして、コンパイラは両方の部分を実行し、カウントは1(++ count <10)に設定されている必要があります。
2)コンパイラが最初に(5 <7)を調べ、falseと評価した後、2番目の式全体をスキップする場合、マスクは増加されていないはずであり、出力で値1を待機します。
何を誤解していて、コンパイラの動作や出力を説明できませんか?