ホームページ >Java >&#&チュートリアル >Java で「j = j」の結果「j」が 0 のままになるのはなぜですか?

Java で「j = j」の結果「j」が 0 のままになるのはなぜですか?

DDD
DDDオリジナル
2024-10-26 23:43:30706ブラウズ

Why Does `j = j  ` Result in `j` Remaining 0 in Java?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。