インクリメントとデクリメント - 萌えJava超入門
第五章 演算子

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

インクリメント(i++)は変数の値を1つ増やします。
デクリメント(i--)は変数の値を1つ減らします。

i++;
i--;

目次

1.インクリメント


変数 iが数値の場合、 i=i+1; のことを i++; と書けます。
この書き方をインクリメントといいます。
C系言語特有の書き方で、採用していない言語も割と多いですが、
使用頻度が高く可読性も高いので、積極的に使いたい表現方法です。

って言うか、Javaで i=i+1; と書くと、
「えーっ!」って感じになる。



面倒なしきたりね。

インクリメント(i++)
  i=i+1; のことは i++; と書けます。

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

コマンドライン
>javac Sample05_41.java
>java Sample05_41
0
1
2
3
4




2.初期化エラー

変数 iに値が入っていること(初期化といいます)が前提条件です。
値が入っていない状態で使うと初期化エラーが発生します。

初期化エラー
//Sample05_41NG.java
class Sample05_41NG {
    public static void main(String[] args){
        int i;
        i++;//初期化エラー
        System.out.println(i);

    }
}

コマンドライン
>javac Sample05_41NG.java
Sample05_41NG.java:5: エラー:
変数iは初期化されていない可能性があります
                 i++;
                 ^
エラー1個




3.デクリメント


インクリメントと同様に i=i-1; のことを i--; と書けます。
この書き方をデクリメントといいます。

デクリメント(i--)
  i=i-1; のことは i--; と書けます。

//Sample05_42.java
class Sample05_42{
    public static void main(String[] args){
        int i=4;
        System.out.println(i--);
        System.out.println(i--);
        System.out.println(i--);
        System.out.println(i--);
        System.out.println(i--);
    }
}

コマンドライン
>javac Sample05_42.java
>java Sample05_42
4
3
2
1
0




4.前置と後置


インクリメントとデクリメントの書き方には、前置と後置の2種類があります。

前置と後置
種類表記説明
前置のインクリメント++i++ してから、i を参照する
後置のインクリメントi++i を参照してから ++ する
前置のデクリメント--i-- してから、i を参照する
後置のデクリメントi--i を参照してから -- する

Sample05_41.java は、後置のインクリメントです。
前置と後置の違いを確認するために
Sample05_41.java の一番最後に、変数iの値を確認するコードを追加してみましょう。

後置のインクリメント。 i++++ してから、i を参照する
//Sample05_43.java
class Sample05_43{
    public static void main(String[] args){
        int i=0;
        System.out.println(i++);  // 0
        System.out.println(i++);  // 1
        System.out.println(i++);  // 2
        System.out.println(i++);  // 3
        System.out.println(i++);  // 4
        System.out.println(i);    // 5
    }
}

コマンドライン
>javac Sample05_43.java
>java Sample05_43
0
1
2
3
4
5    ← 最終的な値は 5

最終的なiの値は、
4ではなくて5だったんスね!
よく見ると、
i++の最初の行は「0」ね?



そう。
後置の場合は、
参照してから
値を変える
んだ。


後置と前置の違い
//Sample05_44.java
class Sample05_44{
    public static void main(String[] args){
      int i=0;
      int j=0;

      System.out.println("前置      後置");
      System.out.println(i+"      "+j);
      System.out.println("---------------");
      System.out.println(++i+"      "+j++);
      System.out.println(++i+"      "+j++);
      System.out.println(++i+"      "+j++);
      System.out.println(++i+"      "+j++);
      System.out.println(++i+"      "+j++);
      System.out.println("---------------");
      System.out.println(i+"      "+j);
    }
}

コマンドライン
>javac Sample05_44.java
>java Sample05_44
前置   後置
0      0
---------------
1      0
2      1
3      2
4      3
5      4
---------------
5      5

変数iが前置のインクリメントになっている。
i+1 してから
値を参照しているのがわかる。


これ使い分けないとダメ?
いや、
後置でインクリメント(デクリメント)してから
参照すれば
前置と同じだ。
無理せず、後置に絞ってもいいだろう。

後置でデクリメントした後に参照すれば
前置のデクリメントと同じ。
//Sample05_45.java
class Sample05_45{
    public static void main(String[] args){
      int i=0;
      i--;
      System.out.println(i);
      i--;
      System.out.println(i);
      i--;
      System.out.println(i);
      i--;
      System.out.println(i);
    }
}

コマンドライン
>javac Sample05_45.java
>java Sample05_45
-1
-2
-3
-4


インクリメントは、
制御文の「for文」でも使われるぞ。
お楽しみに。


お疲れ様でした。




© 2019 awasekagami