だから私は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
再代入するという事実によってオーバーライドされます。j
0
バイトコードを見ると役立つ場合があります。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
追加します。この結果は、が だけインクリメントされた後、によってに格納されます。j
0 + 0
j
ISTORE
j
IINC
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++);