Java の `j = j ;` が `j` を変更しないのはなぜですか?

DDD
リリース: 2024-10-26 19:20:03
オリジナル
477 人が閲覧しました

Why does `j = j  ;` in Java leave `j` unchanged?

Java の後置インクリメント演算子

後置インクリメント演算子 ( ) は、変数の値を 1 ずつインクリメントする単項演算子です。

次のコード セグメントを考えてみましょう:

<code class="java">int j = 0;
for (int i = 0; i < 100; i++) {
  j = j++;
}
System.out.println(j); // prints 0</code>
ログイン後にコピー

ここで、j の値はループ後も 0 のままです。この動作は一見直感に反しますが、コンパイラによって実行されるステップを調べることで理解できます。

  1. 右辺を評価する: 式 j が評価されます。 j の値を 0 から 1 にインクリメントしますが、元の値 (0) を返します。
  2. 結果を代入する: 結果の値 (0) が j に割り当てられます。

基本的に、ポストインクリメント演算子は、変数をインクリメントする前に変数の元の値を保存します。これは次のコード ブロックに似ています:

<code class="java">int temp = j;
j++;
j = temp;</code>
ログイン後にコピー

対照的に、次のコード セグメントを考えてみましょう:

<code class="java">int a = 0, b = 0;
a = b++;
System.out.println(a); // prints 0
System.out.println(b); // prints 1</code>
ログイン後にコピー

ここで、a には b の元の値 (0) が割り当てられます。そして b がインクリメントされます。この動作は、後置増分演算子を使用した代入では最初に右側を評価し、変数を増分してから元の値を割り当てるというルールに従っています。

同じロジックを前の例に適用すると、次のようになります。 j = j の結果が 0 になる理由を確認してください:

  1. 右辺を評価します: j が評価され、j (0) の元の値が返されます。
  2. 結果を代入: 結果の値 (0) が j に割り当てられ、そのインクリメントされた値 (1) が上書きされます。

このように、後置インクリメント演算子は予期しない結果を引き起こす可能性があります。正しく理解していないと結果が生じます。式の評価後に変数をインクリメントし、元の値を変数に割り当てることに留意することが重要です。

以上がJava の `j = j ;` が `j` を変更しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!