- ベストアンサー
Javaの参照型変数の比較についての質問
- Javaの参照型変数の比較についての質問です。SUN教科書Javaアソシエイツ P209 問5-8より
- 「a1.s」と「a2.s」の記述、つまり表記が意味している内容が良く分かりません。解説には「a1.sとa2.sはAクラスのオブジェクトが保持する同一のStringオブジェクトを参照しています。」とあります。
- Aクラスを生成した時にその中にString型クラスsが作れているということでしょうか。アドバイスをよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フィールド参照です。 a1.sならa1オブジェクトのsというフィールドの値を参照します。 「Aクラスを生成した時にその中にString型クラスsが」と書いていますが、 クラスとオブジェクトは異なる概念であるということはちゃんとわかっているでしょうか? とりあえずクラスとオブジェクトについて復習すると良いと思います。
その他の回答 (2)
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
文字列定数 "ABC" は String 型のオブジェクトです。 a1.s や a2.s に代入されているのはこのオブジェクトの参照です。 ここで注意すべきなのは、a1.s や a2.s に代入される "ABC" は同じオブジェクトの参照であるということです。 A型のインスタンス毎に、フィールドa に異なるオブジェクト が代入されても不思議はないのですが、Javaのコンパイラの仕様で 同じ内容の文字列定数のオブジェクトは同一のオブジェクトが使いまわされることに なっています。 詳細は Java の String の intern()メソッドの仕様などを 調べてみてください。
お礼
返信ありがとうございます。 参考書の解説を読んでいるうちに、String型とObject型の違いとその振る舞いが よく分からなくなってしまいました。 また、一から勉強し直します。
- kmee
- ベストアンサー率55% (1857/3366)
すみません。 「参照型変数」云々の前に、 Javaにおける「クラス」というのがどういう構成になっているか、よく復習してください。 特に「メンバ変数」について。 Javaにおいての基礎中の基礎です。 > class A{String s = ”ABC”;} これの定義の意味がわからなければ、始まりません。
お礼
返信ありがとうございます。 ご指摘の通り私には、初歩的な知識においてまだまだ理解が浅いなと、痛感しております。 復習をします。
お礼
返信ありがとうございます。 見慣れない表記だったので、javaの概念が頭の中で上手く整理出来ていませんでした。 ご指摘の通り、復習をし直します。