MENU

【Java Silver】文字列操作の基本と特殊メソッドの理解

Javaでの文字列操作スキルを確認しましょう。今回のテーマは文字列の作成と操作です。特に、StringBuilderStringの違いに注目してください。

問題

次のプログラムを実行した場合、出力結果を選んでください。

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で文字列を操作するとき、StringStringBuilderの違いが重要になります。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メソッドが適用されるため、予想通りの結果が得られます。

つまずきポイント:

StringStringBuilderの特徴を見落としがちです。特にStringのメソッドは新しい文字列を返す際、その結果を変数に保存しないと後の処理で使えないということを覚えておきましょう。

初心者の方はオブジェクトの不可変性という概念が特に重要です。Stringオブジェクトは変更不可であり、メソッドを使用して文字列の変更を意図している場合、それは新しいオブジェクトとして返されることを理解することが重要です。

発展知識:

JavaではStringBuilderStringBufferという二つの変更可能な文字列クラスがあります。StringBufferは同期化されており、スレッドセーフですが、通常の単一スレッドアプリケーションではStringBuilderの方が高速です。パフォーマンスが重要な状況で文字列を操作する場合、これらのクラスはStringよりも効率的です。

オブジェクトの特性を活かして、場面に応じた使い分けを習得すると、Javaでの文字列操作がより効果的になります。

目次