• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:なぜ文字化けして出力されるのか?)

なぜ文字化けして出力されるのか?

このQ&Aのポイント
  • JAVAのプログラムを勉強しているのですが、斉藤・鈴木をHeroとしてインスタンス化してArrayListに格納して1つずつ順番に取り出して名前を表示するプログラムを作っているのですが、System.out.printlnにて出力すると、rensyu3.pkg2.Hero@659e0bfd rensyu3.pkg2.Hero@2a139a55と出力されてしまいます。
  • この文字化けの原因は、HeroクラスがデフォルトのtoStringメソッドを継承しているためです。デフォルトのtoStringメソッドでは、クラス名とハッシュコード(@記号以降)が出力されます。
  • 解決するためには、HeroクラスでtoStringメソッドをオーバーライドし、名前を返すようにします。toStringメソッドを以下のように修正しましょう。 public String toString() { return this.name; }

質問者が選んだベストアンサー

  • ベストアンサー
  • HNEX
  • ベストアンサー率62% (43/69)
回答No.1

System.out.printlnにObjectを渡すと文字列化する為にtoStringメソッドを読んで文字列化してから出力します HeroクラスでtoStringメソッドがオーバーライドされていないのでスーパークラスのObjectクラスのtoStringメソッドが実行され、「クラス名@ハッシュ値」が表示されています。 したがって↓は文字化けではありません rensyu3.pkg2.Hero@659e0bfd 名前を表示させるには System.out.println(hero.Getname()); というように呼び出すか Heroクラスに public String toString() { return this.name; } を実装すると良いと思います

すると、全ての回答が全文表示されます。

関連するQ&A