配列の例題

Java Silver の資格試験について、配列に関する問題です。
以下の問題解けますか?
以下のコードを実行した結果はどうなるか。 int[] intArr = new int[0]; System.out.println(intArr); A:0が出力される B:ハッシュコードが出力される C:何も出力されない D:コンパイルエラーが発生する

int型の配列を生成して、その配列を変数intArrに代入しているけど、
配列の要素にはなにも格納されてないし、
答えは「C:なにも出力されない」じゃないかな。

いいえ、それは違います。
正解は、「B:ハッシュコードが出力される」です。

え、そうなの。
(めっちゃ厳しいやんこの人…)
ていうか、ハッシュコードって・・・?
ハッシュコードとは

Javaにおける「ハッシュコード」は
ObjectクラスのhashCode()メソッドが返す整数値のことだよ。
深堀すると難しいから、簡単に説明するね。
インスタンスを生成したとき、メモリ上にインスタンスが作られるんだけど、
その時にメモリ上の住所(アドレス値)がインスタンスに割り振られるんだ。
そのインスタンスのアドレス値がハッシュコードだよ。

Javaには参照型とかプリミティブ型とかあるけど、
参照型と言われるやつか。
インスタンスを変数に代入したり、
オブジェクトを扱うときは、参照リンクが変数に代入されるもんね。
ということは、配列も参照型なんだ?
配列とは

そう。
配列は、複数の値の集合をまとめて扱う「インスタンス」なんだ。
今回の問題では、生成した配列(=インスタンス)を変数に代入しているよね。
変数にはインスタンスのアドレス値(=参照リンク)、つまりハッシュコードが格納されているから、正解は「B:ハッシュコードが出力される」となるんだ。

なるほど。
てっきり、配列の要素の中身が出力されると思っていたよ。
配列はインスタンスだから、代入先の変数にはインスタンスのアドレス値であるハッシュコードが格納されるって覚えておけばいいね。
ポイントまとめ

それではポイントのおさらいです。
- 配列は複数の値の集合をまとめて扱う「インスタンス」である
- インスタンスが生成されるとき、メモリ上の住所(アドレス)としてハッシュコードが割り振られる
- 参照型の変数にはハッシュコード(インスタンスのアドレス値)が格納される
本日もお疲れ様でした。
コメント