ホームページ  >  記事  >  Java  >  Java では、「j = j 」の結果は 0 になりますが、「a = b」の場合、「b」は 1 にインクリメントされるのはなぜですか?

Java では、「j = j 」の結果は 0 になりますが、「a = b」の場合、「b」は 1 にインクリメントされるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 08:44:01640ブラウズ

Why does `j = j  ` result in 0 in Java, but `a = b  ` increments `b` to 1?

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

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