• 締切済み

ArrayクラスとtoStringについて

問題集で次のプログラムを見掛ました。 public class Main{  public static void main(String args[]){   int[] array = new int[0];   System.out.println(array);  } } これを実行するとprintlnメソッドで toStringメソッドが呼び出されますが、 ArrayクラスはObjectクラスを継承しているため、 toStringメソッドもObjectクラスから継承されているので、 結果として、配列の要素数が0であっても、 エラー等が発生せずハッシュコードが表示される、ということです。 ObjectクラスのtoStringメソッドが ハッシュコードを返すものであるのは理解できます。 でも、なぜ要素数が1以上で何かしらの要素が存在する場合は、 ハッシュコードが返らないのでしょうか? 詳しい方、解説をお願いします。

みんなの回答

回答No.4

ああ、文章をチャント理解してませんでした(^_^;) >なぜ要素数が1以上で何かしらの要素が存在する場合は、 >ハッシュコードが返らないのでしょうか? その認識が間違っていると言う事ですね。

回答No.3

>回答No.1 amanojaku1 javaの場合、配列だけでなく全てのオブジェクトがハッシュコードを持っているようです。 >System.out.println(array); ↑これは「System.out.println(array.toString());」と等価になるようで、「オブジェクト名+@+ハッシュコード」のような文字列が帰り値となるようです(ハッシュに関しては下記参照)。 ハッシュ関数 https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

  • koakino
  • ベストアンサー率44% (22/50)
回答No.2

そのコードならarrayの要素数が1以上でもハッシュが表示されるはずですよ。

noname#225019
質問者

補足

回答ありがとうございます。 もう少し詳しく教えてもらえますか?

回答No.1

>ObjectクラスのtoStringメソッドが >ハッシュコードを返すものであるのは理解できます。 >でも、なぜ要素数が1以上で何かしらの要素が存在する場合は、 >ハッシュコードが返らないのでしょうか? >詳しい方、解説をお願いします。 あまり詳しくないですが(笑)、ハッシュコードと言ってるからには、恐らく配列のハッシュコードでしょう。 つまり(配列の要素数が0なので)「toStringメソッド」がハッシュコードを返しているのではなく、「Arrayクラス」がハッシュコードを返していると言う事しょう。

関連するQ&A

専門家に質問してみよう