誰かが理由を理解するのを手伝ってくれますか:
int i=1;
int j=1;
int k=1;
int l=1;
System.out.println(i++ + i++);
System.out.println(++j + ++j);
System.out.println(k++ + ++k);
System.out.println(++l + l++);
与える:
3
5
4
4
誰かが理由を理解するのを手伝ってくれますか:
int i=1;
int j=1;
int k=1;
int l=1;
System.out.println(i++ + i++);
System.out.println(++j + ++j);
System.out.println(k++ + ++k);
System.out.println(++l + l++);
与える:
3
5
4
4
Variable++ の意味: 式の評価後に変数をインクリメントする。
++Variable の意味: 式を評価する前に変数をインクリメントする。
つまり、例を数値に変換するには:
System.out.println(i++ + i++); //1 + 2
System.out.println(++j + ++j); //2 + 3
System.out.println(k++ + ++k); //1 + 3
System.out.println(++l + l++); //2 + 2
これで問題は解決しましたか、それともさらに説明が必要ですか?
注意: 「println」の後のこれらすべての変数の値は「3」に等しくなります。
OPが尋ねたので、この動作が実際に役立つ場所について、ここに少し「ユースケース」があります。
int i = 0;
while(++i < 5) { //Checks 1 < 5, 2 < 5, 3 < 5, 4 < 5, 5 < 5 -> break. Four runs
System.out.println(i); //Outputs 1, 2, 3, 4 (not 5)
}
に比べ:
int i = 0;
while(i++ < 5) { //Checks 0 < 5, 1 < 5, 2 < 5, 3 < 5, 4 < 5, 5 < 5 -> break. Five runs
System.out.println(i); //Outputs 1, 2, 3, 4, 5
}
知っておくべきこと:
1. Java は式を左から右に評価します
2. ++i-pre-increment、つまり割り当て前のインクリメント
3. i++ - ポストインクリメント、つまり割り当て後のインクリメント
System.out.println(i++ + i++);
op1=i++
op2=1++
sum=op1+op2
i++ - i の値をインクリメントするポスト
合計=3
System.out.println(++j + ++j);
op1=++j
op2=++j
sum=op1+op2
++i - i の値を事前にインクリメントする
次に、op1 と op2 が加算されて合計が 5 として出力され、j の値は次のようになります。
System.out.println(k++ + ++k);
op1=k++
op2=++k
合計=op1+op2
k の値を op1 に代入し、k をインクリメントします。op1=1,k=2
k の値をインクリメントしてから、op2 に代入します。op2=3,k=3
合計 = 4
System.out.println(++l + l++);
ここでも上記のロジックを適用します。
i++ + i++
i を使用してからインクリメントすることを意味するため、i はある種のスタックにプッシュされます。
その後、1ずつ増加し、
次に、演算子 (+) がスタックにプッシュされ、
次に、i (現在は 2) がスタックにプッシュされます。
式が終了したので、値と演算子がポップされます: 2 番目の i は 2、最初の i は 1、2+1=3 (プッシュされた後にインクリメントされたため、i は現在 3 です)。
おそらく見逃しているのは、ポストインクリメントの場合、式全体の評価後に i が増加しないことです。プリインクリメントの場合はその逆です。
名前が示すように、ポスト インクリメントは変数が処理 (読み取り) された後に変数の値をインクリメントしますが、プレ インクリメントは BEFORE の値をインクリメントします。
i の場合、最初に i が 1 ずつインクリメントされますが、1 として読み取られ、次に再び 1 ずつインクリメントされ (最初のインクリメントから既に 2 になっています)、したがって 3 にインクリメントされますが、2 として読み取られます。この結果は 1+2 になります。 = 3 で、i の値も 3 になります...
System.out.println(i++)
- >印刷後にインクリメントするため1を生成しますが、2回呼び出すと1 + 2になるため、変換できます
System.out.println(int i=i+1, plus int i = i + 1 -> これにより 2 が得られます)
最初のフレーズは2を与え、2番目のフレーズは3を与えますが、i ++インクリメントの前にそれを出力するため、最後に1 + 2になります
System.out.println(++j);
-> 印刷前にインクリメントするため、2 が生成されます
したがって、u が ++j = 2 になり、次に ++j = 3 になる場合、++j と ++j は 5 になります。