プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

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

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2004/01/05 12:42

こんにちは。



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

この回答への補足

ありがとうございます。

String str=new String("the");
str=str.concat(" End.");

とかくべきでした。
この場合は最初のstrは捨てられて新たにStringが作られてその参照がstrに新たにセットされると言うことですね。

補足日時:2004/01/05 12:45
    • good
    • 0

それは



str.concat(" End.");

の返値が"the End."になってるだけで、str自体は変更されていないのでは?
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2004/01/05 12:48

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);
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2004/01/05 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!