LoginSignup
0
0

More than 1 year has passed since last update.

[Java] 配列の書き方がスッキリわかる記事

Last updated at Posted at 2021-09-15

配列の書き方がいろいろあって、混乱したので自分用にまとめました。

この記事の対象読者

以下のコードが構文エラーになる理由がわからない人

int[] ary;
ary = new int[]
ary[0] = 1;
ary[1] = 2;
ary[2] = 3;

このエラーの理由がわからない場合は、この記事を読めば頭が整理されてスッキリすると思います。

結論

配列を定義して使用するためには、以下の3つのステップが必要になります。

  • 配列の宣言
  • 配列の生成
  • 要素の初期化

3番目の「要素の初期化」はなくてもエラーにはならないけど、
わかりやすいコードにするためにも、明記することが推奨されてます。

配列の宣言

まず最初に必要なのは、配列の宣言です。

こんなやつ。

int[] ary;
int ary[];

aryという変数名で配列を宣言してます。

上記はどちらも同じ意味です。
お好みでどうぞ。

また、intのところをStringやdouble等、他の型にすることもできます。
intで宣言したら、int型の要素しか入れることができません。

配列の生成

次に必要なのは、配列の生成です。
newを使うあれです。

new int[要素数];

この記述により、配列に使用するメモリが確保されます。

実際の書き方

int[] ary; // 配列の宣言
ary = new int[要素数]; // 配列の生成

1行で書くこともできます。

int[] ary = new int[要素数]; // 配列の宣言 + 配列の生成

エラーになるケース

  • 要素数の省略
  • 配列の宣言をしない

場合、構文エラーになります。

// 要素数の省略
int[] ary;
ary = new int[]; // 構文エラー
// 配列の宣言をしない
ary = new int[要素数]; // 構文エラー

要素の初期化

配列の生成をしただけでは、中身は空っぽです。
※正確には型に応じた規定値(intの場合は0)が入ってます。

配列として扱うために、配列に要素を入れてあげる必要があります。

まとめて初期化

int[] ary;
ary = new int[3] {1, 2, 3};

ひとつずつ初期化

int[] ary;
ary = new int[3];
ary[0] = 1;
ary[1] = 2;
ary[2] = 3;

1行で書く場合

配列の宣言から初期化まで1行で書くこともできます。

int[] ary = new int[3] {1, 2, 3};

どれも使っても同じ結果になります。

やりがちな間違い

int[] ary; // 配列の宣言
ary = new int[3]; // 配列の生成
ary = {1, 2, 3}; // 配列の初期化

配列の宣言もされていて、要素数も指定されているし、問題がないように見えます。
ですが、これはエラーになります。

問題なのは3行目。

これで初期化ができているように見えますが、実は初期化できていません。
なぜなら、aryに入っているのは配列への参照情報だからです。

{}を使ってまとめて初期化したい場合は、new int[]と一緒に記述する必要があります。

ここまでが配列の書き方の基本です。

冒頭のコードはなぜエラー?

では、冒頭のコードはなぜエラーになるのでしょうか?
このコードです。

int[] ary;
ary = new int[];
ary[0] = 1;
ary[1] = 2;
ary[2] = 3;

ここまで読んでいただいたらわかると思います。

そうですね。要素数が指定されていません。
正しくはこう。

int[] ary;
ary = new int[3]; // 要素数を指定
ary[0] = 1;
ary[1] = 2;
ary[2] = 3;

これで正常に動作します。

おまけ:省略記法

配列を扱うには上記の3ステップが必要なのですが、
Javaには省略記法というものが用意されています。

要素数の省略

// 1行で書く場合
int[] ary1 = new int[] {1, 2, 3};

// 分けて書く場合
int[] ary2;
ary2 = new int[] {1, 2, 3};

{}を使用して同時に初期化する場合に限り、要素数を省略することができます。

配列の生成の省略

int[] ary = {1, 2, 3};

配列の生成も省略してるし、参照情報を入れるaryに要素を直接代入しており、エラーが出る気がするのですが、こちらも正常に動作します。

これらの記法に限り、省略が許可されています。

ここは理屈ではなく、こういうものだと割り切って暗記すると、混乱しなくて済むと思います。

まとめ

配列の書き方を自分なりにまとめてみました。
自分はこの考え方で、結構あたまの中がスッキリしたので、
少しでも理解の助けになればうれしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0