• ベストアンサー

生成されるStringオブジェクトは2つ3つ??

http://www.okweb.ne.jp/kotaeru.php3?q=716958 以前質問した内容について、またわからなくなりました。 「STRINGオブジェクトはいくつ作成されますか? String a,b,c; a="1234"; b=a; c=a+b; 」 で、答えはA=B="1234"のひとつと c="12341234"のひとつで、計2つ、ということなんですが・・・ たとえばOkwebクラスがあったとして Okweb ok = new Okweb(); Okweb goo = ok; この場合には生成されるオブジェクトは1つというのはわかります。 gooにも参照が渡されたというだけで、あくまでもひとつということですよね。それは、okに変化があったとき同時にgooも変化することでわかります。 ここで例の問題に戻ります。 加えて b="5678"; として確認(println等で)してみますと、 a="1234",b="5678" となっています これは a=b=1234ではなくて a=1234 b=1234 というようにあくまでもaとbは違うStringオブジェクトであるということを示しているといえないのでしょうか? よろしくお願いします教えてください

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

  • ベストアンサー
  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.1

String a, b; a = "1234"; // "1234"というオブジェクトを作って、 // それをaが参照 b = a; // aと同じオブジェクトをbが参照 b = "5678"; // "5678"というオブジェクトを新しく作って、 // それをbが参照。 // b = new String("5678") と同じ 納得していただけましたでしょうか?

azicyan
質問者

お礼

ありがとうございます。 一旦はわかったはずだったんですが・・・(^_^;) あくまでも 変数=”abc" とした時にオブジェクトは作られるということですね。

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

その他の回答 (1)

  • mi-si
  • ベストアンサー率35% (200/567)
回答No.2

Java言語の中でもString Objectは特殊な扱いをされています。 a="1234";/* (1) */ b=a;/* (2) */ b="5648";/* (3) */ は、Javaコンパイル内部では、 a = new String("1234");/* (1') */ b = a;/* (2') */ b = new String("5678");/* (3') */ と言う様に置き換えられています。 つまり、 1' で、aに、Object (1')を参照, 2' で、bは、aと同じObjectを参照。(Object (1')を参照) 3' で、bのObject (1')への参照は破棄され新たにCreateされたObject (3')を参照する。 つまり、(2)の後のaとbは同じObjectを参照してますが、(3)の後のaとbは別のオブジェクト参照しています。

azicyan
質問者

お礼

ありがとうございます。 たすかりました!

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

関連するQ&A