36

以下またはここのプログラムからSystem.out.println(i)、値を出力するための最後の呼び出しはなぜ7ですか?

class PrePostDemo {
     public static void main(String[] args){
          int i = 3;
          i++;
          System.out.println(i);    // "4"
          ++i;             
          System.out.println(i);    // "5"
          System.out.println(++i);  // "6"
          System.out.println(i++);  // "6"
          System.out.println(i);    // "7"
     }
}
4

11 に答える 11

73
i = 5;
System.out.println(++i); //6

これは、iを取り、それに1を追加して、値5 + 1 = 6を返すため、「6」を出力します。これは接頭辞であり、操作で使用する前に番号に追加されます。

i = 6;
System.out.println(i++); //6 (i = 7, prints 6)

これは、iを取り、コピーを格納し、変数に1を加算してから、コピーを返すため、「6」を出力します。したがって、私がいた値を取得するだけでなく、同時にそれをインクリメントします。したがって、古い値を出力しますが、増分されます。接尾辞の増分の美しさ。

次に、iを印刷すると、増分されたiの実際の値が表示されます:7。

于 2011-03-24T01:11:11.490 に答える
18

私はこれが答えられたことを知っていますが、別の説明が役立つかもしれないと考えました.

それを説明する別の方法は次のとおりです。

++iの結果が返され、元の結果が返され、次のアクションのためにnew i保存されます。i++inew i

それを考える方法は、式の中で何か他のことをすることです。の現在の値を出力する場合、 が式の中で変更されたか、式の後に変更されたiかによって異なります。i

    int i = 1;
result i = ++i * 2 // result = 4, i = 2

i結果が計算される前に評価 (変更) されます。この式の出力iは、この式に使用される変更された値を示しますi

result i = i++ * 2 // result = 2, i = 2

i結果が計算された後に評価されます。したがって、この式から印刷すると、この式で使用されるi元の値が得られますが、さらに使用するために変更されます。したがって、式の直後に の値を出力すると、 の新しいインクリメントされた値が表示されます。の値が変更されたため、印刷されているか使用されているか。iiiii

result i = i++ * 2 // result = 2, i = 2
System.out.println(i); // 2

一貫したパターンを維持し、すべての値に印刷行を含めた場合:

  int i = 3; 
System.out.println(i);    //  3
System.out.println(i++);  //  3
System.out.println(i);    // "4"
System.out.println(++i);  //  5          
System.out.println(i);    // "5"
System.out.println(++i);  // "6"
System.out.println(i++);  // "6"
System.out.println(i);    // "7"
于 2013-11-18T06:30:50.553 に答える
2
System.out.println(i++);  // "6"

これにより、このコード行の前にあった値(6)が送信printlnされ、Iがインクリメントされます(7になります)。

于 2011-03-24T01:08:13.430 に答える
2

変数が更新されなかったのはなぜですか?

  • Postfix:iの現在の値を関数に渡し、それをインクリメントします。
  • プレフィックス:現在の値をインクリメントしてから、関数に渡します。

あなたが私と何もしない行は違いはありません。

これは割り当てにも当てはまることに注意してください。

i = 0;
test = ++i;  // 1
test2 = i++; // 1
于 2011-03-24T01:09:11.753 に答える
0

この例で接頭辞/接尾辞をよりよく理解できるかもしれません。

public class TestPrefixPostFix 
{
    public static void main (String[] args)
    { 
        int x=10;
        System.out.println( (x++ % 2 == 0)?"yes "+ x: " no "+x);
        x=10;
        System.out.println( (++x % 2 == 0)?"yes "+ x: " no "+x);
    }
}    
于 2015-03-11T16:31:38.163 に答える
0

これが私の答えです。分かりやすいと感じる人もいるでしょう。

package package02;

public class C11PostfixAndPrefix {

    public static void main(String[] args) {
        // In this program, we will use the value of x for understanding prefix 
        // and the value of y for understaning postfix. 
        // Let's see how it works. 

        int x = 5; 
        int y = 5; 

        Line 13:   System.out.println(++x);  // 6   This is prefixing. 1 is added before x is used. 
        Line 14:   System.out.println(y++);  // 5   This is postfixing. y is used first and 1 is added. 

        System.out.println("---------- just for differentiating");

        System.out.println(x);  // 6   In prefixing, the value is same as before {See line 13}
        System.out.println(y);  // 6   In postfixing, the value increases by 1  {See line 14} 

        // Conclusion: In prefixing (++x), the value of x gets increased first and the used 
        // in an operation. While, in postfixing (y++), the value is used first and changed by
        // adding the number. 
    }
}
于 2017-01-04T00:27:21.820 に答える