1

だから私はJavaでプログラミングするのが初めてで、これがなぜなのか理解するのに苦労しています

for (int i = 0, j=0; i <10; i++) {
    System.out.println(j += j++);
}

0 を 10 回出力しますか?

4

4 に答える 4

5
j += j++

と考えることができます

j = j + j++

ここで、 から開始するj = 0ため、j++インクリメントして古い値(!)j返すため、基本的には0

   j = 0 + 0
//     ^   ^
//     j   j++

十回。の増分は、直後に右辺 ( ) の結果にj再代入するという事実によってオーバーライドされます。j0


バイトコードを見ると役立つ場合があります。j += j++本当に:

ILOAD 1    // load j, which is 0
ILOAD 1    // load j, which is 0
IINC 1 1   // j++ 
IADD       // add top two stack elements
ISTORE 1   // store result back in j

IINCスタックを変更しないため、の値をそれ自体にIADD追加します。この結果は、が だけインクリメントされた、によってに格納されます。j0 + 0jISTORE jIINC

于 2013-09-12T01:33:41.123 に答える
1

j += j++あなたが実際にやっている

j = j + j++;

だからj=0あなたは得るでしょう

j = 0 + j++

そして、その値を返した後j++にインクリメントするのでj、あなたは得るでしょう

j = 0 + 0;

今のところj++j は 1 になりますが、計算後0+0は に戻り0、その値が出力されます。

于 2013-09-12T01:35:20.123 に答える
0

forループについて確信が持てませんか?int i = 0 は、int i を宣言し、それを 0 に設定します。j = 0 は、別の int j を宣言し、それを 0 に設定します。i < 10 は、i が 10 未満の間、ループが続行されることを示します。最後に、i++ は、ループが完了するたびに i = i + 1 と述べているため、基本的に i に 1 が追加されます。

于 2013-09-12T02:12:24.523 に答える
-1
System.out.println(++j);

それ以外の

System.out.println(j += j++); 
于 2013-09-12T01:34:42.520 に答える