[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00350] Re: オブジェクトの印刷



  ========== 楽天ビジネス http://business.rakuten.co.jp =========
□■□■□■□■□■□■□■□■ ●既に約3,000社の企業様がご利用中 ●
■ ビジネスサービス商談市場 □ ●必要なサービス提供企業が見つかる●
□   ★楽天ビジネス★   ■ ●素早く簡単に複数社からの見積獲得●
■□■□■□■□■□■□■□■□ ●サービス提供企業の登録も受付中 ●
------------------------------------------------------------------------


上原と申します。

"Satoh" <kgd01422@xxxxxxxxxxxxxxxxx> writes:
> たまたまJavaの参考書にオブジェクトの印刷例が
> 載っていました。
> オブジェクトは本来、クラスのインスタンス化された
> ものでそれ自体印刷する意味があるのかと思って
> おりましたが、...
〜
> 上記は、つらつらAPIリファレンスをサーフィンした結果
> ですが、このオブジェクトの印刷の意味ってあるんで
> しょうかね。(使い道が今ひとつなんですが。)

「印刷」というのは、プリンタとかで紙に印刷する、ということを言っておら
れますか?だとすると、printやprintlnは必ずしも紙に印刷するということを
意味するのではなく、(画面などに)出力する、ということです。

そんなのあたりまえじゃん、というのならOKです。念のためです念のため。

ご質問は、その前提で、IntegerやString型のインスタンスをprintするのは意
味がある表示がなされるからOK として、java.lang.Objectや、あるいは
toString()をオーバライド定義していないクラスのインスタンスをprintした
とき、その出力「クラス名@ハッシュ関数結果の文字列」に何の意味があるか、
ということでしょうか。

まあ、printデバッグ時に「インスタンスが同じかどうか」を確認するのには
役にたつと思いますよ。

  HoeHoe h1 = new HoeHoe();
  HoeHoe h2 = new HoeHoe();

  System.out.println("h1="+h1);
  System.out.println("h2="+h2);

   :
  いろんな処理を経て
   :

  void foo(HoeHoe h) {
    // この時点でのhは果たしてh1か、h2か?

    System.out.println("h="+h);  // こうすればわかる
  }

仮に、Object#toString()が空文字列とか、nullとかを返していたら、
こうはいきません。

ちなみにObjectのハッシュ値はアドレスが得られるのでハッシュ値の
衝突がおきて「たまたま同じ値になる」ということはないです。

--
§NTTS○FT 技術開発部エレクトロニックコマース技術センター 上原 潤二 §
PGP Key fingerprint = B7 C0 CB 1F 1C 88 69 2A  25 36 8A EE 93 A3 61 72