Javaの配列はなぜ0から始まる?インデックス0の意味と範囲外エラー

最終更新日

Javaの配列を学び始めると、「なぜ最初の番号が1ではなく0なのか」でつまずくことがあります。結論から言うと、配列のインデックスは「何番目か」という数え方ではなく、先頭からどれだけ離れているかを表す番号として考えると理解しやすくなります。

この記事では、Javaの配列が0から始まる理由、array[0]の読み方、lengthとの関係、範囲外エラーが起きる理由を、入門者向けに整理します。

Javaの配列は0から始まる

Javaで配列を作ると、最初の要素は0番、次の要素は1番、その次は2番として扱います。

public class MainExample {
    public static void main(String[] args) {
        int[] scores = {80, 90, 70};

        System.out.println(scores[0]);
        System.out.println(scores[1]);
        System.out.println(scores[2]);
    }
}

実行結果

80
90
70

scores[0]は「1番目の点数」を取り出しています。人間の感覚では1番目ですが、Javaの配列ではインデックス0で指定します。

そもそも配列とは

配列を簡単に言えば、「データをまとめて格納しておく箱」です。身近な例で考えると、引き出しの付いた棚のように、複数の値を順番にしまっておくものです。

変数が1つの値を入れる箱だとすると、配列は同じ種類の値をまとめて扱うための箱です。Javaでは、点数、名前、商品価格など、同じ種類のデータを並べて処理したいときに配列を使います。

なぜ配列は0から始まるのか

配列のインデックスは、「1個目、2個目」という数え方よりも、先頭からの位置を表す番号として考えると分かりやすくなります。

  • 先頭の要素は、先頭から0個分離れているので0
  • 次の要素は、先頭から1個分離れているので1
  • さらに次の要素は、先頭から2個分離れているので2

つまり、配列の番号は「順番」ではなく「先頭からの距離」として読むと自然です。

引き出しの棚で配列を考える図

たとえば棚の一部をTシャツ置き場としてまとめて扱うとします。このTシャツ置き場の最初の引き出しが、配列の0番目にあたります。

配列の0番目から2番目までを示す図

要素数と最後のインデックスの関係

Javaの配列では、要素数はlengthで確認できます。ただし、要素数が3個の配列でも、最後のインデックスは3ではなく2です。

public class MainExample {
    public static void main(String[] args) {
        String[] names = {"山田", "佐藤", "田中"};

        System.out.println(names.length);
        System.out.println(names[0]);
        System.out.println(names[2]);
    }
}

実行結果

3
山田
田中

names.lengthは3ですが、使えるインデックスは012です。最後の要素を取り出すときは、names[names.length - 1]と書けます。

範囲外エラーが起きる理由

配列の要素数とインデックスを混同すると、存在しない場所を読もうとしてエラーになります。

public class MainExample {
    public static void main(String[] args) {
        int[] scores = {80, 90, 70};

        System.out.println(scores[3]);
    }
}

この配列の要素数は3個ですが、使えるインデックスは0から2までです。scores[3]は4番目の要素を指定しているため、JavaではArrayIndexOutOfBoundsExceptionが発生します。

for文で配列を回すときの注意点

配列を順番に処理するときは、インデックスを0から始め、length未満の間だけ繰り返します。

public class MainExample {
    public static void main(String[] args) {
        int[] scores = {80, 90, 70};

        for (int i = 0; i < scores.length; i++) {
            System.out.println(scores[i]);
        }
    }
}

i < scores.lengthにしているのは、最後のインデックスがlength - 1だからです。ここをi <= scores.lengthにすると、最後に存在しないインデックスへ進んでしまいます。

よくある疑問

配列の1番目はarray[1]ではないの?

Javaでは、配列の1番目はarray[0]です。array[1]は2番目の要素を表します。

最後の要素はどうやって取り出す?

最後の要素はarray[array.length - 1]で取り出せます。要素数が3なら最後のインデックスは2、要素数が10なら最後のインデックスは9です。

インデックスはなぜマイナスでは始まらない?

Javaの配列では、先頭要素を基準にして0以上の番号で位置を指定します。array[-1]のような指定はできません。

あわせて読みたい関連記事

まとめ

Javaの配列が0から始まる理由は、インデックスを「何番目か」ではなく「先頭からどれだけ離れているか」として考えると理解しやすくなります。

要素数が3個の配列で使えるインデックスは、012です。配列を読むときは、lengthと最後のインデックスの違いを意識しましょう。

シェアする