インクリメントとデクリメント
5.4 インクリメントとデクリメント
プログラムでは、変数の値を 1 つずつ増やしたり、逆に 1 つずつ減らしたりする演算がよく使われます。
それをプログラムで表現するには「a = a + 1」や「a = a – 1」と書くのが簡単ですが、++、—の演算子を使って、「a++」や「a–」のように書く方法もあります。
指定された変数の値を 1 つ増やす処理をインクリメントといい、1 つ減らす処理をデクリメントといいます。
5.4.1 インクリメント演算子とデクリメント演算子
インクリメントを行う演算式をインクリメント演算子(増分演算子)、デクリメントを行う演算式をデクリメント演算子(減分演算子)と呼びます。
表 5.4.1 : インクリメント演算子とデクリメント演算子
インクリメント・デクリメントの演算子は、演算子を前につけるか、あるいは後につけるかによって処理の順序が変わってきますので、利用する際は注意が必要です。
次のサンプルプログラムで、インクリメント・デクリメントの前置・後置の違いについて見ていきましょう。
5.4.2 インクリメント演算子を使ったプログラム
前置インクリメントと後置インクリメントの演算子を使った演算を行い、その違いを確認してみましょう。
① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch5
③ 名前 :IncrementOperator
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ IncrementOperator.java
package jp.co.f1.intro.ch5; public class IncrementOperator { public static void main(String[] args) { // インクリメント用の値を管理する変数の初期化 int num = 3; System.out.println("--- 前置インクリメント --- "); System.out.println(num); // 初期値の表示 System.out.println(++num); // 足しこまれた後に表示する System.out.println(num); // 前置インクリメント後の値の表示 // インクリメント用の値を管理する変数の再初期化 num = 3; System.out.println("--- 後置インクリメント --- "); System.out.println(num); // 初期値の表示 System.out.println(num++); // 表示した後に足しこまれる System.out.println(num); // 後置インクリメント後の値の表示 } }
実行結果
解説
まず、前置インクリメントの場合の値の変化を見てみます。
11 行目では、int 型の変数 num に代入されている値である 3 をそのまま表示しています。
12 行目は、変数 num に前置インクリメントを行っているので、変数 num に 1 を足しこんだ 4 が表示されます。
「++num」は、「num = num + 1」とも書き換えられます。
13 行目は、変数 num をそのまま表示しています。12 行目と値の変化はありません。
次に、後置インクリメントの場合の値の変化を確認します。
19 行目は、変数 num に代入されている値をそのまま表示しています。16 行目で変数 num の値は 3 に変更しているので、ここでは 3 が表示されます。
20 行目は変数 num に後置インクリメントを行っていますが、注意が必要です。値の後ろに付けるインクリメントは、20 行目で出力する時点では足しこまれていません。ここで表示されるのは、3 になります。
次の 21 行目では、変数 num の値を表示します。後置インクリメントは、次にその値を使用する時から反映されるので、ここで変数 num の値は 4 となります。
インクリメント演算子(++)が変数の前に付いた時と後ろに付いた時の処理の違いを理解しておきましょう。
以下に前置と後置インクリメントの処理順の違いをイメージで示します。
5.4.3 デクリメント演算子を使ったプログラム
続いて、デクリメント演算子を使った演算の説明をします。前置デクリメントと後置デクリメントの違いを確認していきましょう。
① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch5
③ 名前 :DecrementOperator
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ DecrementOperator.java
package jp.co.f1.intro.ch5; public class DecrementOperator { public static void main(String[] args) { // デクリメント用の値を管理する変数の初期化 int num = 3; System.out.println("--- 前置デクリメント --- "); System.out.println(num); // 初期値の表示 System.out.println(--num); // 引かれた後に表示する System.out.println(num); // 前置デクリメント後の値の表示 // デクリメント用の値を管理する変数の再初期化 num = 3; System.out.println("--- 後置デクリメント --- "); System.out.println(num); // 初期値の表示 System.out.println(num--); // 表示した後に引かれる System.out.println(num); // 後置デクリメント後の値の表示 } }
実行結果
解説
この「DecrementOperator.wava」サンプルでは、前項で使用した「IncrementOperator.wava」のインクリメント演算部分を、デクリメント演算に変更して使用しています。
まず、前置デクリメントの場合の値の変化を見てみます。
11 行目では、int 型の変数 num に代入されている値である 3 をそのまま表示しています。
12 行目は、変数 num に前置デクリメントを行っているので、変数 num から 1 を引いた 2 が表示されます。
「–num」は、「num = num – 1」とも書き換えられます。
13 行目は、変数 num をそのまま表示しています。12 行目と値の変化はありません。
次に、後置デクリメントの場合の値の変化を確認します。
19 行目は、変数 num に代入されている値をそのまま表示しています。16 行目で変数 num の値は 3 に変更しているので、ここでは 3 が表示されます。
20 行目は変数 num に後置デクリメントを行っています。値の後ろに付けるデクリメントは、その行で出力する時点ではまだ減算されないので、ここでは 3 になります。
次の 21 行目では、変数 num の値を表示します。後置デクリメントは、次にその値を使用する時から反映されるので、ここで変数 num の値は 2 となります。
デクリメント演算子(–)はインクリメント演算子(++)と同じように、変数の前に付くか後ろに付くかによって処理の順序が変わることを覚えておきましょう。
ポイント・ インクリメントやデクリメントで、前置するか後置するかによって、処理の順序が変わる。
・ 後ろに付ける場合、結果反映のタイミングに注意が必要である。