ホームページ >Java >&#&チュートリアル >Java で「j = j」の結果「j」が 0 のままになるのはなぜですか?
Java のポストインクリメント演算子
Java では、ポストインクリメント演算子 ( ) は、変数の評価後に変数の値を 1 つインクリメントします。この動作は、「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 を調べるときに混乱が生じます。 Java 言語仕様 (JLS) によれば、このステートメントは次と同等です:
<code class="java">temp = j; j = j + 1; j = temp;</code>
ただし、この説明は、 a に 0 を代入し、 b を 1 にインクリメントする a = b の結果と矛盾します。この矛盾があるため、a = b が次のように評価されることに注意することが重要です:
<code class="java">temp = b; b = b + 1; a = temp;</code>
これは、lhs = rhs 形式のポストインクリメント代入が次と同等であることを意味します:
<code class="java">temp = rhs; rhs = rhs + 1; lhs = temp;</code>
このルールを j = j と a = b の両方に適用すると、コードで観察される結果が明確になります。 j = j は、事実上、j (0) の値を temp に代入し、j を 1 に増分してから、temp (0) を j に戻します。これは、インクリメント演算子にもかかわらず j が 0 を出力する理由を説明しています。
以上がJava で「j = j」の結果「j」が 0 のままになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。