2007.05.17

Stringオブジェクト

突然ですが、

String s1 = "abba";
s1.replace("a","b");
System.out.println(s1);

このような場合、s1はどのように表示されるでしょうか?

答えは"abba"です。
Stringオブジェクトは作成後には変更できません。
このコードでは新しくStringオブジェクトを生成しているだけです。
元のs1を変更したい場合には、
s1 = s1.replace("a","b");
とします。
s1の文字列の内容を置換し、新しく生成したStringオブジェクトをs1に格納しています。

Stringオブジェクトでは他にも気をつけるべきことがあります。
それはStringオブジェクトの比較をする時です。
以下のコードではどのような値が出力されるでしょうか?

String s1 = new String("あ");
String s2 = new String("あ");

if(s1 == s2) {
   System.out.println("true");
}
else {
   System.out.println("false");
}

答えは"false"です。
気を付けなければいけないのが、Javaでは「==」は両方の参照が同じオブジェクトを指している場合のみtrueを返します。
文字列の内容を判定するにはequals()メソッドを使用します。

if(s1.equals(s2)) {
   System.out.println("true");
}
else {
   System.out.println("false");
}

equals()メソッドを使用することで、文字列の内容の比較がされ、"true"と表示されます。
ただしこの場合、s1がnullであると、例外が発生してしまうので注意が必要です。

2つとも初歩的なことかもしれませんが、意外とはまってしまう落とし穴かもしれません。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
osano