突然ですが、
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つとも初歩的なことかもしれませんが、意外とはまってしまう落とし穴かもしれません。