• ベストアンサー

JavaのStringは

一端作成されると変更できないはずなのに String str=new String("the"); str.concat(" End."); でstrが"the"から"the End."に変更可能です。 これをどう考えたらいいのでしょうか?

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

  • ベストアンサー
回答No.2

こんにちは。 theは変更されたわけではなく、theはtheできちんとあります。 String str=new String("the"); str.concat(" End."); の場合、theとEndがくっついて新しいオブジェクトを生成してるので、theのオブジェクトを変更したわけではないんです。

keyguy
質問者

補足

ありがとうございます。 String str=new String("the"); str=str.concat(" End."); とかくべきでした。 この場合は最初のstrは捨てられて新たにStringが作られてその参照がstrに新たにセットされると言うことですね。

その他の回答 (3)

  • tekebon
  • ベストアンサー率62% (36/58)
回答No.4

concat()メソッドは結合した文字列をさす新しいStringオブジェクトを返しオブジェクトの 値は変更しないはずです。 ですからご質問の変数strのデータは"the"のまま変更されません。 次のプログラムを実行していただければ別のオブジェクトであるのが確認できるかと思います。 class test{ public static void main(String args[]){ String str="Hello"; String str2=str.concat("Java"); System.out.println("str="+str); System.out.println("str2="+str2); System.out.println(str==str2); } }

keyguy
質問者

お礼

ありがとうございます。 質問に抜けがありました。 String str=new String("the"); str=str.concat(" End."); とすべきでした。 要するにstrが捨てられるのですね。

回答No.3

それは str.concat(" End."); の返値が"the End."になってるだけで、str自体は変更されていないのでは?

keyguy
質問者

お礼

ありがとうございます。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

二つの文字列をつなぎ合わせたStringが「新たに」作成され、返されます。

keyguy
質問者

お礼

ありがとうございます。

関連するQ&A