Stringクラスは固定文字列を、StringBufferクラスは可変文字列を実装するクラスですが、簡単な文字列の操作では、どちらを使っても同様の結果を得られます。しかし、Javaでは文字列リテラルはStringクラスのオブジェクトとして扱われますので、特に必要がなければStringクラスを用いた方がプログラムがシンプルになります。
例えば、下記のプログラムがあるとしましょう。
このプログラムで行っている文字列操作は連結だけですので、Stringクラスを用いるように書き換えることができます。しかし、書き換えると違う結果になってしまいます。
この違いが起こる原因は、Stringクラスのオブジェクトが不変であり、文字列の操作により参照が変化してしまうことにあります。
具体的には、swがStringBufferクラスの参照変数である場合の「sw.append("文字列");」と、Stringクラスである場合の「sw += "文字列";」は、どちらも、文字列を連結し、連結結果をswで参照します。しかし、実行後と実行前のswの参照先は、前者では変わりませんが、後者では変わってしまうのです。なお、これは後者を「sw = sw + "文字列";」や「sw = sw.concat("文字列");」とした場合も同様です。
Stringクラスのオブジェクトでは(文字列リテラルも)、文字列操作の結果が常に新しいStringオブジェクトとなることに注意しましょう。
なお、元のプログラムの動作を変えずに、Stringクラスを用いるように書き換えると、以下のようになります(一例)。
Copyright © ITmedia, Inc. All Rights Reserved.