Java | 基礎文法:インクリメント

Java Java
スポンサーリンク

インクリメントの全体像

インクリメントは「数値を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
Java

x++ は「元の値を返したあと増える」ため、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);
}
Java

i++++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 は同じ。チームの規約に合わせ、コード全体で一貫性を保つ。

タイトルとURLをコピーしました