配列の初期化を理解する
配列の初期化では、長さを指定して既定値の要素を作る方法と、初期化子で各要素の値を列挙する方法を使い分けます。宣言時・再代入時の構文、各型の初期値、生成時の例外まで確認します。
この単元で学ぶこと
- 配列生成と初期化子の構文を判定する
- 要素型ごとの既定値を求める
- 初期化子の評価順と例外を追う
本文解説
長さを指定して作る int[] a=new int[3];はint要素を三つ持つ配列です。各要素に既定値0が入ります。ローカル変数の初期値規則とは異なり、生成済み配列の要素はそのまま読み取れます。a.lengthは3、a[0]は0です。
型による既定値 boolean[]はfalse、double[]は0.0、char[]はコード値0、String[]など参照型要素はnullです。charの0は文字'0'のコード48とは違います。String配列を作っても各Stringオブジェクトが自動生成されるわけではありません。
値を並べて初期化 int[] a={2,4,6};は列挙した順に三要素を初期化します。int[] a=new int[]{2,4,6};とも書けます。値の個数が長さとなるため、new int[3]{2,4,6}のように長さと初期化子の両方を指定できません。
再代入時の書き方 int[] a;a={2,4};は不正です。宣言とは別の代入で作る場合はa=new int[]{2,4};と書きます。波括弧だけの配列初期化子はどの式の場所にも置けるものではありません。
空配列 int[] a={};やnew int[0]は長さ0の配列を生成する合法な構文です。lengthを取得でき、拡張forは0回です。a=nullとは異なり実体があります。ただし添字0の要素は存在しません。
長さの値と型 int size=3;new int[size]のように実行時の値で長さを決められます。負の値ならNegativeArraySizeExceptionです。long size=3L;new int[size]は長さの式の型が不適合でコンパイルエラーです。小さな数値でも型の規則は変わりません。
要素ごとの型検査 int[] a={1,2.5};はdoubleをintへ暗黙縮小できず不正です。double[] a={1,2.5};なら1を1.0へ拡大して格納できます。String[] a={"x",null};のように参照型へnullを入れることもできます。
初期化子の順序 int n=1;int[] a={n++,n++};は左から評価しaが{1,2}、nが3になります。各項の式を評価した時点の値が入ります。初期化子内での副作用は読み違いを招きやすいので、学習では表で追い、実務では必要に応じて分けて書きます。
図解
重要ポイント
- new int[3]は三要素を0で初期化する。
- 参照型配列の各要素は既定でnull。
- 宣言時は{...}を使えるが再代入ではnew 型[]{...}とする。
- 長さ指定と値の列挙を同時には書かない。
間違えやすい点
- String配列を作ればString実体も作られると思わない。
- 空配列の生成とnull参照を混同しない。
- 負の長さをコンパイルエラーだと決めつけない。
用語解説
- 配列初期化子
- {2,4,6}のように要素値を順に並べる構文。
- 既定値
- 明示的な要素値を指定しない生成時に入る型ごとの値。
- 配列生成式
- new int[3]やnew int[]{2,4}のように配列実体を作る式。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。