Java のポストインクリメント演算子
Java のポストインクリメント演算子 ( ) は、その独特な動作により、プログラマにとって混乱の原因となることがよくあります。この記事では、ポスト インクリメント演算子の複雑さを調査し、Joshua Bloch 著「Java Puzzlers」の次のコード スニペットが予期しない結果を生み出す理由を説明します。
<code class="java">public class Test22 { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++; } System.out.println(j); // prints 0 int a = 0, b = 0; a = b++; System.out.println(a); System.out.println(b); // prints 1 } }</code>
著者の説明に基づくと、式はj = j は次のように動作する必要があります:
<code class="java">temp = j; j = j + 1; j = temp;</code>
このロジックは、 j の値が増分されてから j に割り当てられ、その結果、式 a = b と同様の増分が生じることを意味します。ただし、後者の場合、ポスト インクリメント演算子は別のコンテキストで使用され、異なる結果が生じます。
a = b の正しい評価は、実際には次のようになります:
<code class="java">temp = b; b = b + 1; // increment a = temp; // then assign</code>
これは Java 言語仕様 (JLS) と一致しており、後置インクリメント式では「値 1 が変数の値に加算され、その合計が変数に戻される」と規定されています。したがって、 a = b は、 b を 1 にインクリメントする前に、 b の元の値 (0) を a に割り当てます。
式 j = j に戻ると、ポスト インクリメント演算子によって j が評価されることがわかります。インクリメントの前に、定数 0 が割り当てられます。著者の説明で追加された temp 変数は、実際にはポストインクリメントの評価には関与しません。
ポストインクリメント演算子の実際の動作を理解することで、次のような問題を回避できます。混乱を防ぎ、正確なコード実行を保証します。
以上がJava では、「j = j 」の結果は 0 になりますが、「a = b」の場合、「b」は 1 にインクリメントされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。