Java Silver 配列問題 その1

Java Silver

配列の例題

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:ハッシュコードが出力される」となるんだ。

なるほど。

てっきり、配列の要素の中身が出力されると思っていたよ。

配列はインスタンスだから、代入先の変数にはインスタンスのアドレス値であるハッシュコードが格納されるって覚えておけばいいね。

ポイントまとめ

それではポイントのおさらいです。

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

本日もお疲れ様でした。

コメント

タイトルとURLをコピーしました