インクリメントとデクリメント

i++ と ++iの違いとは

    1. iは前置きインクリメント演算子と呼ばれ

i++は後置きインクリメント演算子と呼び区別します。
インクリメント演算子は両方ともに変数に現在の値+1という結果を与えます。

public class Test {
    public static void main(String[] args){
        int i = 10;

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

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

コンソールには11と12という数字が表示されます。
この結果から、それぞれ1を加算していることがわかります。

前置きと後置きの違いは多項式でインクリメントするとわかります。
前置き演算子はインクリメントしてから式を評価しますが
後置き演算しは式を評価してから変数をインクリメントするという
違いがあります。

ようするに、前置きの場合はインクリメントしてから値を返しますが
後置きは値を渡してからインクリメントするため、結果が異なります。

public class Test {
    public static void main(String[] args){
        int i = 10;

        System.out.println(++i);

        System.out.println(i++);

        System.out.println(i);
    }
}

この結果は111112となります。

    1. iはi=i+1を計算してからiを渡しますが、i++はiを渡してからi=i+1の計算をします。

i++はiを渡してからi=i+1の計算をします。
なので、i++の時点では11で、その後の変数iは12になっています。


※おまけ※

public class Test {
    public static void main(String[] args){
        int i =0;
        i=i++;
        System.out.println(i);
    }
}

この結果は0になります。その理由は
i++は以下の手順で評価されていましたよね?

  1. iを評価して変数を生成します
  2. iの値を保存します(0を格納)
  3. 保存したiの値を引数として、選択された演算子を呼び出す(iに1を足す)
  4. 演算子から返される値をiの評価によって得られる場所に格納します(変数から値を取りだして次の値にする)
  5. 保存されたiの値が演算の結果になります(変数から値を取り出して0をiに代入する(1を足した結果は上書きされて破棄される!!))