3

誰かが理由を理解するのを手伝ってくれますか:

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

4

5 に答える 5

15

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
}
于 2012-07-24T10:48:13.197 に答える
4

知っておくべきこと:
1. Java は式を左から右に評価します
2. ++i-pre-increment、つまり割り当て前のインクリメント
3. i++ - ポストインクリメント、つまり割り当て後のインクリメント

System.out.println(i++ + i++);

op1=i++
op2=1++
sum=op1+op2
i++ - i の値をインクリメントするポスト

  1. i を op1 に代入し、i.op1=1,i=2 の値をインクリメントします
  2. i を op2 に代入し、i.op2=2,i=3 の値をインクリメントします
  3. 合計=3

    System.out.println(++j + ++j);

op1=++j
op2=++j
sum=op1+op2
++i - i の値を事前にインクリメントする

  1. 最初に j が 2 にインクリメントされ、次に op1 に割り当てられます。
  2. 次に、j は再び 3 にインクリメントされ、op2 に割り当てられます。
  3. 次に、op1 と op2 が加算されて合計が 5 として出力され、j の値は次のようになります。

    System.out.println(k++ + ++k);

op1=k++
op2=++k
合計=op1+op2

  1. k の値を op1 に代入し、k をインクリメントします。op1=1,k=2

  2. k の値をインクリメントしてから、op2 に代入します。op2=3,k=3

  3. 合計 = 4

    System.out.println(++l + l++);

ここでも上記のロジックを適用します。

于 2012-07-24T11:00:45.843 に答える
1
i++ + i++

i を使用してからインクリメントすることを意味するため、i はある種のスタックにプッシュされます。

その後、1ずつ増加し、

次に、演算子 (+) がスタックにプッシュされ、

次に、i (現在は 2) がスタックにプッシュされます。

式が終了したので、値と演算子がポップされます: 2 番目の i は 2、最初の i は 1、2+1=3 (プッシュされた後にインクリメントされたため、i は現在 3 です)。

おそらく見逃しているのは、ポストインクリメントの場合、式全体の評価後に i が増加しないことです。プリインクリメントの場合はその逆です。

于 2012-07-24T10:50:46.050 に答える
1

名前が示すように、ポスト インクリメントは変数が処理 (読み取り) された後に変数の値をインクリメントしますが、プレ インクリメントは BEFORE の値をインクリメントします。

i の場合、最初に i が 1 ずつインクリメントされますが、1 として読み取られ、次に再び 1 ずつインクリメントされ (最初のインクリメントから既に 2 になっています)、したがって 3 にインクリメントされますが、2 として読み取られます。この結果は 1+2 になります。 = 3 で、i の値も 3 になります...

于 2012-07-24T10:49:15.320 に答える
1

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 になります。

于 2012-07-24T10:58:59.967 に答える