3

私は少し疑問があります。なぜ以下のコードが値i=2を出力しているのですか。

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

誰かが2行目で何が起こっているのか説明してもらえますか?

だからここで++を行う意味はありませんか?

ありがとう

4

4 に答える 4

4
i=i++;

最初に割り当てが行われるため、増分が適用されます。

何かのようなもの:

最初にiが2になり、次に++操作が発生しますが、結果はiに再割り当てされないため、iの値は2のままになります。

于 2012-08-27T18:41:04.320 に答える
1

i = i++;最初にi++式を評価します。式は増分され、増分iの値に評価されます。この値をすぐに割り当てると、の値がリセットされ、増分が発生していないように見えます。他の動作を引き起こします。i iii = ++i;

于 2012-08-27T18:44:43.260 に答える
0

コンピュータにiをiに割り当てるように指示i=i++;し、その後、iの値をインクリメントしますが、iの値は2であるため、iには影響しません。

それを行う正しい方法は意味があるはずですi=++i;、それをiに割り当てる前にiに1を追加するか、または単に使用することができますi++;

于 2012-08-27T18:43:33.540 に答える
0

非常に価値のあることを理解するのを手伝ってくれたすべての人に感謝します。

私はこれについてどこか素敵な投稿を見つけました。

私はstackoverflowフォーラムからの提案からのみ回答を得ましたが、私が感じていることを見逃している明確な説明がいくつかありました。

Miljen Mikicは、リンクが機能しておらず、ページが見つからないと言っています。

以下の問題についての明確な説明は次のとおりです。

int a=2, b=2;
int c = a++/b++;
System.out.println(c);

以下に分解します。

   0:iconst_2      ; [I]Push the constant 2 on the stack[/I]  
   1:istore_1      ; [I]Pop the stack into local variable 1 (a)[/I]  
   2:iconst_2      ; [I]Push the constant 2 on the stack, again[/I]  
   3:istore_2      ; [I]Pop the stack into local variable 2 (b)[/I]  
   4:iload_1       ; [I]Push the value of a on the stack[/I]  
   5:iinc1, 1  ; [I]Add 1 to local variable 1 (a)[/I]  
   8:iload_2       ; [I]Push the value of b on the stack[/I]  
   9:iinc2, 1  ; [I]Add 1 to local variable 2 (b)[/I]  
   12:idiv          ; [I]Pop two ints off the stack, divide, push result[/I]  
   13:istore_3      ; [I]Pop the stack into local variable 3 (c)[/I]  
   14:return  

これは私がはるかによく理解するのに役立ちます。

私の主張が間違っている場合は、これに追加してください。

すべての回答をありがとう。

于 2012-08-28T05:57:22.100 に答える