だから私はJavaでプログラミングするのが初めてで、これがなぜなのか理解するのに苦労しています
for (int i = 0, j=0; i <10; i++) {
System.out.println(j += j++);
}
0 を 10 回出力しますか?
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
j += j++あなたが実際にやっている
j = j + j++;
だからj=0あなたは得るでしょう
j = 0 + j++
そして、その値を返した後j++にインクリメントするのでj、あなたは得るでしょう
j = 0 + 0;
今のところj++j は 1 になりますが、計算後0+0は に戻り0、その値が出力されます。
forループについて確信が持てませんか?int i = 0 は、int i を宣言し、それを 0 に設定します。j = 0 は、別の int j を宣言し、それを 0 に設定します。i < 10 は、i が 10 未満の間、ループが続行されることを示します。最後に、i++ は、ループが完了するたびに i = i + 1 と述べているため、基本的に i に 1 が追加されます。
System.out.println(++j);
それ以外の
System.out.println(j += j++);