Javaでの文字列操作スキルを確認しましょう。今回のテーマは文字列の作成と操作です。特に、StringBuilder
とString
の違いに注目してください。
問題
次のプログラムを実行した場合、出力結果を選んでください。
public class StringTest {
public static void main(String[] args) {
String str = "Hello";
StringBuilder sb = new StringBuilder(str);
sb.append(" World");
str.concat(" there");
System.out.println(sb.toString());
System.out.println(str.concat("!"));
}
}
選択肢
- A. Hello World
- B. Hello World
- C. Hello World
- D. Hello World
答えと解説
回答を見る
答え
A. Hello World
E. Hello!
解説
基本説明:
Javaで文字列を操作するとき、String
とStringBuilder
の違いが重要になります。String
は不可変であり、一度作成された文字列は変更できません。一方、StringBuilder
は変更可能であり、生成後も内容を変更できます。
コードのstr.concat(" there")
は新しい文字列を生成しますが、オリジナルのstr
変数は変更されません。したがって2番目のSystem.out.println
ではstr
の内容は最初のままです。「str.concat("!");
」も同様に、str
自体を変化させません。
StringBuilder sb
に対してsb.append(" World")
で内容が変更されるため、sb.toString()
を出力すると「Hello World
」が表示されます。
誤答理由:
このプログラムではString
にはconcat
メソッドを使っていますが、これは元の文字列を変えず、新しい文字列を生成するだけです。そのため、str
のもともとの内容である「Hello
」は変わりません。.concatメソッドは、オリジナルの文字列に変更を加えず新しい文字列を返すだけです。この特性を忘れてstr
の変更を期待すると誤った解釈につながります。
StringBuilder
ではappend
メソッドが適用されるため、予想通りの結果が得られます。
つまずきポイント:
String
とStringBuilder
の特徴を見落としがちです。特にString
のメソッドは新しい文字列を返す際、その結果を変数に保存しないと後の処理で使えないということを覚えておきましょう。
初心者の方はオブジェクトの不可変性という概念が特に重要です。String
オブジェクトは変更不可であり、メソッドを使用して文字列の変更を意図している場合、それは新しいオブジェクトとして返されることを理解することが重要です。
発展知識:
JavaではStringBuilder
とStringBuffer
という二つの変更可能な文字列クラスがあります。StringBuffer
は同期化されており、スレッドセーフですが、通常の単一スレッドアプリケーションではStringBuilder
の方が高速です。パフォーマンスが重要な状況で文字列を操作する場合、これらのクラスはString
よりも効率的です。
オブジェクトの特性を活かして、場面に応じた使い分けを習得すると、Javaでの文字列操作がより効果的になります。