Javaプログラミング ~陥りやすいミス③~

Javaプログラミング ~陥りやすいミス③~

今回で3回目となる
「Javaプログラミングでの陥りやすいミス」
シリーズ

今回のテーマは『配列の扱い方』です。

さて、配列とは何だったでしょか?

「複数の値を連続的に並べて
 ひとまとめに扱うデータ構造」

これを配列と言います。

では、Javaで配列を使用するには?

まず初めに、
「配列の宣言と生成」が必要となります。

配列の宣言と生成

配列の宣言・生成方法には、
次の2種類があります。

① 型名[] 配列名;
配列名 = new 型名[要素数];

② 型名[] 配列名 = new 型名[要素数];

上記の2つは同じ意味で、
単に、①を1行で表現したものが
②になります。

また、配列を生成する際には、
new演算子を使用し、

配列に格納する値(要素)の数を
「要素数」で指定します。

具体的には、以下のようになります。

① int[] a;
a = new int[3];
② int[] a = new int[3];

上記は、整数の値を3つ格納できる
aという配列になります。

しかし、以下のような書き方は、
コンパイルエラーになりますので
注意してください。

int[3] a;

配列の初期化

配列の宣言と生成が終わったところで、
今度は配列に値を入れていきます。

配列に初めて値を入れることを
「配列の初期化」と言います。

配列の初期化方法は、
次の3種類があります。

① int[] a = new int[3];

a[0] = 10;
a[1] = 20;
a[2] = 30;

② int[] a = new int[]{10, 20, 30};
③ int[] a = {10, 20, 30};

①は、
配列の宣言と生成が終わった後、
[]の中に
配列の何番目に値を入れるかを
指定して初期化しています。

②は、
配列の生成と同時に値を指定して
初期化しています。

ただし、
以下のように要素数を指定して
初期化すると、

コンパイルエラーになるため
注意が必要です。

int[] a = new int[3]{10, 20, 30};

要素数を指定しなくとも、
{}内の値の数がそのまま要素数となる、
ということです。

③は、一見すれば
コンパイルエラーになりそうですが、
Javaでは、
new演算子を使用せずに宣言した配列に
直接値を入れて初期化することもできます。

配列の代入

ここまで、「配列の宣言と生成」と
「配列の初期化」について
方法と注意点をお話してきました。

最後に、
配列を扱う上で一番陥りやすいミス
「配列の代入」についてみていきます。

では早速、
以下の例を考えてみましょう。

int[] a = new int[]{10, 20, 30};
int[] b = a;

a[0] = 50;
System.out.println(b[0]);

さて、上記の結果は
どう表示されるでしょうか。

10

ではありません。

50

と表示されます。

なんで??と思われた方は、
前回の「文字列の比較」の最後を
思い出してください。

上記の例は、

String str1 = new String(“あ”);
String str2 = str1;

と同じです。

“あ”という文字列は1つだけ生成され、
変数str1と変数str2には同じ”あ”の場所が
格納されます。

今回の場合も、
{10, 20, 30}という値は1つだけ生成され、
配列aと配列bには同じ{10, 20, 30}の場所が
格納されるのです。

配列も文字列同様、
new演算子によって生成されます。

そのため、
配列名(aやb)には実際の値ではなく、
その値の場所が格納されます。

new演算子は、
生成した値の格納場所を返す
「演算子」なのです。

kohsaka

これにより、
配列aの値を変更することは、
配列bの値を変更することになるため、
b[0]の値も50になります。

配列を扱う際には注意点が多いので、
慎重にプログラミングしてください。

——————————————————-
■□お知らせ□■ 新しいLAブログができました。
初心者向け】快適なプログラミング環境を作るパソコン選びのポイント6つ
どのPCを買えばいいか迷いますよね。他にも役立つ情報が盛りだくさん。
是非ご覧ください。
——————————————————