Javaのインクリメント・デクリメント演算子
はじめて触れると少し紛らわしいけれど、慣れるととても便利な記法です。ここでは、考え方をゆっくりかみ砕いて、つまずきやすいポイントを例題で丁寧に説明します。
基本の意味と使える場所
- インクリメント(
++): 変数の値を1だけ増やす - デクリメント(
--): 変数の値を1だけ減らす - 使える対象: 変数に対してのみ使える(数値の直書きや計算結果には使えない)
int a = 5;
a++; // aは6になる
a--; // aは5に戻る
// これはダメ(コンパイルエラー)
// 5++;
// (a + 1)++;
Java- 省略との違い:
a = a + 1;とa++;は同じ意味。ただし++のほうが短く読みやすい。
前置と後置の違い(超重要)
インクリメント/デクリメントには「前置」「後置」があります。増減のタイミングが違うので、代入や式の中で使うと結果が変わります。
- 後置(
a++/a--): 先に「元の値を使う」、その後で増減する - 前置(
++a/--a): 先に増減してから、その新しい値を使う
int a = 5;
// 後置の例
int x = a++; // xには5が入る(元の値)、処理後にaは6になる
// 前置の例
int y = ++a; // 先にaが7になる、その7がyに入る
Java- つまずきポイント: 「式の評価時点で何が起きるか」を意識する。代入の右側やメソッド呼び出しの引数で使うと差が出る。
ループでのよくある使い方
ループでは「カウンタを1ずつ動かす」場面が多く、++ と -- が頻出です。
// 0, 1, 2, 3, 4 と出力
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
// 5, 4, 3, 2, 1 と出力
for (int j = 5; j > 0; j--) {
System.out.println(j);
}
Java- ポイント:
i++は毎回1だけ増える。j--は毎回1だけ減る。 - 前置/後置はどっちでもいい? for文の「更新部分(第3式)」では通常どちらでもOK(
i++と++iで違いは生まれない)。式の中で使うときは違いが出るので注意。
例題で理解を固める
例題1:前置と後置の結果
int a = 3;
int b = a++; // ここでbは? aは?
int c = ++a; // ここでcは? aは?
System.out.println(a + ", " + b + ", " + c);
Java- 考え方:
- b = a++ は「bに3が入り、その後aが4になる」
- c = ++a は「先にaが5になり、その5がcに入る」
- 出力:
5, 3, 5
例題2:式の中で使う
int x = 10;
int y = x++ + 5; // yは?
int z = ++x + 5; // zは?
System.out.println("x=" + x + ", y=" + y + ", z=" + z);
Java- 考え方:
- y = 10 + 5 = 15(計算後にxは11)
- z = 先にxが12になり、12 + 5 = 17
- 出力:
x=12, y=15, z=17
例題3:配列の走査
int[] nums = {2, 4, 6};
int i = 0;
System.out.println(nums[i++]); // 2(その後i=1)
System.out.println(nums[++i]); // 2行目後にi=1、ここで先にi=2、nums[2]=6
Java- ポイント: インデックスに前置/後置を混ぜると読みづらくなる。初心者は一旦分けて書くと安全。
int i = 0;
System.out.println(nums[i]); i++;
i++;
System.out.println(nums[i]);
Java例題4:whileループでのカウンタ
int count = 0;
while (count < 3) {
System.out.println("count=" + count);
count++; // これがないと無限ループ
}
Java- 注意: 増減を忘れると条件が変わらず、無限ループになる。
よくある落とし穴と回避策
- 同じ式の中で複数回インクリメントしない: 読みづらく、バグのもと。
int a = 1;
// 悪い例(何が起きるか一目で分からない)
int r = a++ + ++a;
Java- 配列やインデックスでの濫用を避ける: 読みやすさ重視で、段階を分ける。
- 副作用に敏感になる:
++/--は値を返す「式」であり同時に変数を書き換える「副作用」を持つ。式の評価順序を意識する。 - longやfloatなどの型でも動くが、キャストやオーバーフローに注意: 例えば
byteやshortは内部的にintで計算されるため、場面によってはキャストが必要になる。
練習問題(解答つき)
練習1:結果を当てる
int a = 4;
int b = a-- + 2; // ?
int c = --a + 2; // ?
System.out.println("a=" + a + ", b=" + b + ", c=" + c);
Java- 解答:
- b = 4 + 2 = 6(その後aは3)
- c = 先にaが2になり、2 + 2 = 4
- 出力:
a=2, b=6, c=4
練習2:for文を書き換える
次のfor文と同じ動作を、while で書き換えてください。
for (int i = 1; i <= 3; i++) {
System.out.println(i);
}
Java- 解答例:
int i = 1;
while (i <= 3) {
System.out.println(i);
i++; // 忘れずに増やす
}
Java練習3:安全なインデックス操作
配列 {10, 20, 30, 40} を先頭から順に出力してください。i++ を使っても構いませんが、読みやすさを優先してください。
- 解答例:
int[] arr = {10, 20, 30, 40};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
Javaまとめと実践のコツ
- 意味の整理:
++は「1増」、--は「1減」。前置は先に変える、後置は後で変える。 - 安全第一: 代入や式の中での前置/後置は結果が変わる。読みづらくなる場合は分けて書く。
- 実践: ループの更新、カウンタ、配列走査で使いこなす。まずは for と while で自然に使えるように練習する。
