- ベストアンサー
JavaのStringは
一端作成されると変更できないはずなのに String str=new String("the"); str.concat(" End."); でstrが"the"から"the End."に変更可能です。 これをどう考えたらいいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 theは変更されたわけではなく、theはtheできちんとあります。 String str=new String("the"); str.concat(" End."); の場合、theとEndがくっついて新しいオブジェクトを生成してるので、theのオブジェクトを変更したわけではないんです。
その他の回答 (3)
- tekebon
- ベストアンサー率62% (36/58)
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); } }
お礼
ありがとうございます。 質問に抜けがありました。 String str=new String("the"); str=str.concat(" End."); とすべきでした。 要するにstrが捨てられるのですね。
- winterofmeei
- ベストアンサー率22% (20/88)
それは str.concat(" End."); の返値が"the End."になってるだけで、str自体は変更されていないのでは?
お礼
ありがとうございます。
- ranx
- ベストアンサー率24% (357/1463)
二つの文字列をつなぎ合わせたStringが「新たに」作成され、返されます。
お礼
ありがとうございます。
補足
ありがとうございます。 String str=new String("the"); str=str.concat(" End."); とかくべきでした。 この場合は最初のstrは捨てられて新たにStringが作られてその参照がstrに新たにセットされると言うことですね。