【Java】インクリメント(++) とか デクリメント(--) の 前置後置 と仲良くなれた話


はじめに

Java Silver SE11 の勉強をしていて思ったのですが、
インクリメントとデクリメントの前置/後置って忘れがちだし、試験で出そう…

実際、Javaの基本文法を勉強していた時にもやった記憶はあるのに試験勉強を始めるまで忘れていたので、まとめてみました。

特に前置後置の考え方と仲良くなれるための例と出会えたので、共有したいと思います。
早くその例を教えてほしい!という方はクリック→ じゃあ 前置 後置 って?

そもそも インクリメント とか デクリメント って?

【インクリメント】

1を足す処理のこと。下のソースコードのnumber++;++ のように書く。

Increment.java
public class Increment{
    public static void main (String[] args){
        int number = 2;
        number++;
        System.out.println(number);
    }
}

↓ 出力結果

> javac Increment.java
> java Increment
3

number++;number = number + 1; と同じ処理結果を返すということですね。

【デクリメント】

1を減らす処理のこと。下のソースコードのnumber--;-- のように書く。

Decrement.java
public class Decrement{
    public static void main (String[] args){
        int number = 2;
        number--;
        System.out.println(number);
    }
}

↓ 出力結果

> javac Decrement.java
> java Decrement
1

number--;number = number - 1; と同じ処理結果を返すようです。

じゃあ 前置 後置 って?

前置

演算子を変数の前に置く書き方。
①インクリメント(デクリメント)してから
②代入する

後置

演算子を変数の後に置く書き方。前置とは逆に、
①代入してから
②インクリメント(デクリメント)する

…って言われても、ピンと来ない方もいますよね。私もです。
そんな方に、私が前置後置とちょっと仲良くなれた例をご紹介します。
(↓ //の後は実行結果です)

前置の例

Increment.java
public class Increment{
    public static void main (String[] args){
        int number = 2;
        System.out.println("実行前number:" + number);  //実行前number:2
        int zenchi = ++number;
        System.out.println("実行後number:" + number);  //実行後number:3
        System.out.println("実行後zenchi:" + zenchi);  //実行後zenchi:3
    }
}

後置の例

Increment.java
public class Increment{
    public static void main (String[] args){
        int number = 2;
        System.out.println("実行前number:" + number);  //実行前number:2
        int kouchi = number++;
        System.out.println("実行後number:" + number);  //実行後number:3
        System.out.println("実行後kouchi:" + kouchi);  //実行後kouchi:2
    }
}

おわかりいただけますか…
前置の例の zenchi3 になっている のに対して
後置の例の kouchi2 になっている ことを…

解説すると、
前置の場合は
int zenchi = ++number;
①インクリメントして(++number を計算して 3 となって)から
②代入する(int zenchi = 3; となる)ので
zenchi3 になります。

前置の例(もう一度見てみましょう)

Increment.java
public class Increment{
    public static void main (String[] args){
        int number = 2;
        System.out.println("実行前number:" + number);  //実行前number:2
        int zenchi = ++number;
        System.out.println("実行後number:" + number);  //実行後number:3
        System.out.println("実行後zenchi:" + zenchi);  //実行後zenchi:3
    }
}

対して、
後置の場合は
int kouchi = number++;
①代入して(int kouchi = number がまず実行されて kouchi2 となって)から
②インクリメントする(++number を計算して number3 となる) ので、
kouchi2 になります。

後置の例(もう一度見てみましょう)

Increment.java
public class Increment{
    public static void main (String[] args){
        int number = 2;
        System.out.println("実行前number:" + number);  //実行前number:2
        int kouchi = number++;
        System.out.println("実行後number:" + number);  //実行後number:3
        System.out.println("実行後kouchi:" + kouchi);  //実行後kouchi:2
    }
}

そのため、
前置の例の zenchi3 になる のに対して
後置の例の kouchi2 になる のです。

参考

翔泳社が発行している、以下の書籍を参考にしました!紫本です

  • オラクル認定資格教科書 Javaプログラマ Silver SE 11(試験番号1Z0-815)

さいごに

私がなるほど!と思った例を挙げましたが、少しでも理解の助けになれば嬉しいです。

今回取り上げた前置後置以外にも、細か!と思うようなことばかりですが、こういう細かな決まりがちゃんとあるからプログラムが動くんだよな…と思います。
引き続き勉強して、思ったことを共有していきたいと思います!