インクリメントの全体像
インクリメントは「数値を1つ増やす」ための最短記法です。++ を使うと、x = x + 1; を1文字で書けます。Java では「前置」と「後置」の2種類があり、式として使ったときの振る舞いが異なります。対象は数値のプリミティブ型(byte, short, int, long, char, float, double)で、boolean には使えません。
前置と後置の違い
基本形と直観的な使い分け
int n = 5;
System.out.println(++n); // 6(前置:先に増やしてから使う)
System.out.println(n++); // 6(後置:使ってから増やす。n は 7 になる)
System.out.println(n); // 7
Java- 前置(
++n): その場で値が増え、増えた値が式の結果になります。 - 後置(
n++): その場では「増える前の値」が式の結果になり、評価後に変数だけ増えます。
式の中で使うと読み手が混乱しやすいので、初心者は「単独の行で使う」か「ループの更新部に限定」するのがおすすめです。
よくある落とし穴(深掘り)
代入と後置のトラップ
int x = 3;
x = x++; // x は 3 のまま(後置は「元の値」を返す)
System.out.println(x); // 3
Javax++ は「元の値を返したあと増える」ため、x = x++; は結果として増えません。値を増やしたいだけなら、代入文に混ぜず単独で x++; と書きます。
同じ式で複数回の増減
int i = 0;
int r = i++ + ++i; // 評価順序は定義されているが、読み手にとって難解
Java「同じ変数を同じ式の中で複数回インクリメント/デクリメント」するのは可読性が極端に落ちます。分解して書くのが安全です。
配列アクセスと後置の組み合わせ
int[] a = {10, 20, 30};
int i = 0;
System.out.println(a[i++]); // 10 を取りつつ i は 1 になる
System.out.println(a[i]); // 20
Java便利ですが、複雑な式では誤読の原因になります。ロジックが絡むなら「先に増やす→アクセス」と段階を分けます。
ループとカウンタでの使い方
for ループの更新部
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
Javai++ と ++i は更新部では同じ効果です(式の結果を使わないため)。可読性の観点ではどちらでも構いませんが、チームのコーディング規約に合わせると良いです。
while ループでの前置・後置
int i = 0;
while (i < 3) {
System.out.println(i);
++i; // ここは前置/後置どちらでも同じ(単独使用)
}
Java単独の行で使う限り、前置と後置の違いを気にする必要はありません。式に混ぜないのがコツです。
数値型ごとの挙動とキャスト(深掘り)
short/byte/char に対する ++
short s = 1;
s++; // OK(暗黙キャストされる)
/* s = s + 1; */ // NG:中間結果が int になり、short に戻せない
char c = 'A';
c++; // 'B' になる(コード値が 1 増える)
Java++ は暗黙に「元の型へ戻す」ため、short/byte/char でも使えます。一方、s = s + 1; は中間結果が int になるためコンパイルエラーです。境界が曖昧になりやすいので、計算が増えるなら最初から int に統一すると安全です。
オーバーフローと浮動小数点
int max = Integer.MAX_VALUE;
max++; // -2147483648(循環。例外は出ない)
Java整数は範囲を超えると静かに循環します。大きく増える可能性があるなら long を使う、または増加前後で境界チェックを入れます。float/double に対する ++ も可能ですが、誤差や可読性の観点から「連続加算」は += のほうが意図が伝わりやすいです。
デクリメント(–)と代替表記
— の基本
int n = 3;
System.out.println(--n); // 2(前置)
System.out.println(n--); // 2(後置。n は 1)
Java-- も ++ と同じく前置/後置の違いがあります。読みやすさを優先し、単独で使うか更新部に限定しましょう。
代替:+= 1 と可読性
int i = 0;
i += 1; // i++ と同じ効果
i -= 1; // i-- と同じ効果
Java「何をしているか」を明示したい場面や、式としての戻り値が不要な場面では += 1/-= 1 が読みやすくなります。パターンとして覚えておくと便利です。
実用例で身につける
例 1: カウンタと条件分岐
public class CounterDemo {
public static void main(String[] args) {
int success = 0;
boolean[] results = {true, false, true};
for (boolean r : results) {
if (r) success++; // 成功をカウント
}
System.out.println("success=" + success); // 2
}
}
Java例 2: 先に増やしてから使う(前置)
public class PreIncrement {
public static void main(String[] args) {
int i = 0;
while (++i <= 3) { // i を 1 から始めたいときに便利
System.out.println(i);
}
}
}
Java例 3: 後置で現在値を使ってから増やす
public class PostIncrement {
public static void main(String[] args) {
int i = 0;
while (i < 3) {
System.out.println("index=" + i++);
}
}
}
Java設計の指針(重要ポイントのまとめ)
- 前置は「先に増える」、後置は「使ってから増える」。式の中では違いが効いてくるため、単独の行で使うのが安全。
x = x++;は値が増えないトラップ。増やすだけならx++;と単独で書く。- 同じ式で複数の増減は避ける。配列アクセスや計算はステップに分解して可読性を最優先。
short/byte/charに対する++は暗黙キャストで動くが、計算が多いならintに揃える。オーバーフローは例外にならない。- ループの更新部では
i++と++iは同じ。チームの規約に合わせ、コード全体で一貫性を保つ。
