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