- 締切済み
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以上で何かしらの要素が存在する場合は、 ハッシュコードが返らないのでしょうか? 詳しい方、解説をお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- amanojaku1
- ベストアンサー率54% (265/488)
ああ、文章をチャント理解してませんでした(^_^;) >なぜ要素数が1以上で何かしらの要素が存在する場合は、 >ハッシュコードが返らないのでしょうか? その認識が間違っていると言う事ですね。
- amanojaku1
- ベストアンサー率54% (265/488)
>回答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)
そのコードならarrayの要素数が1以上でもハッシュが表示されるはずですよ。
- amanojaku1
- ベストアンサー率54% (265/488)
>ObjectクラスのtoStringメソッドが >ハッシュコードを返すものであるのは理解できます。 >でも、なぜ要素数が1以上で何かしらの要素が存在する場合は、 >ハッシュコードが返らないのでしょうか? >詳しい方、解説をお願いします。 あまり詳しくないですが(笑)、ハッシュコードと言ってるからには、恐らく配列のハッシュコードでしょう。 つまり(配列の要素数が0なので)「toStringメソッド」がハッシュコードを返しているのではなく、「Arrayクラス」がハッシュコードを返していると言う事しょう。
補足
回答ありがとうございます。 もう少し詳しく教えてもらえますか?