2

重複の可能性:
a += b と a =+ b 、また a++ と ++a の違いは何ですか?
「x = x++」の後の x は何ですか?

Test1 では、i はその値を 1 インクリメントし、古い値を返し、その増分値を i 変数に保持します。しかし、Test2 では、値を 1 インクリメントして古い値を返し、インクリメントも発生しました。i 変数に割り当てられていないインクリメントの i のコピーを作成しますか。Test2 の操作手順は何ですか。

テスト1

int i = 0;
System.out.print(i++);
System.out.print(i);

出力 01

テスト2

int i = 0;
i = i++;
System.out.println(i);

出力 0

4

3 に答える 3

15

ステートメントi = i++には、Java で明確に定義された動作があります。まず、 の値がiスタックにプッシュされます。次に、変数iがインクリメントされます。最後に、スタックの一番上の値が取り出され、 に割り当てられiます。最終的な結果は、何も起こらないということです。スマートなオプティマイザは、ステートメント全体を削除できます。

于 2012-07-19T23:08:31.560 に答える
3

i = i++;はトリッキーな構造ですが、実際に行うことは次のようなものです。

int iOld = i;
i = i + 1;
i = iOld;

i++;スタンドアロンのステートメントとしてのみ使用したい。

于 2012-07-19T23:10:34.950 に答える
1

++あなたの例のように変数の後に演算子が現れると、ii++のインクリメントは操作が終わった後に起こります。そのため、最初の例の最初の出力はゼロで、まだ追加していません。2 番目の出力は 1 です。

2 番目の例は、i を保存してインクリメントし、元に戻すのと同じです。

i++

オペレーターそのものです。

++i印刷アクションを実行する前に、 i を増やす最初のものを試すことができます

于 2012-07-19T23:11:45.570 に答える