@634

String vs StringBuffer

Advertisement

特徴

String

java.lang.Stringクラスは不変オブジェクトなので、一度設定した値を直接変更することができない。たとえば次のように文字列結合を行った場合、
String str = "こん";
str = str + "にちは";
"こん"という値を保持しているStringクラスが変更されるのではなく、新たに"こんにちは"という値を持ったStringオブジェクトが生成される。Stringに対して文字列演算を行うたびにオブジェクトが生成されるため、コストが高くなってしまう。

StringBuffer

java.lang.StringBufferクラスは文字列をバッファを使用して管理するため、一度設定した値も容易に変更・追加を行うことができる。文字列の追加にはappendメソッドを使用する。メソッド呼び出しのコストはかかるが、毎回オブジェクトを生成するStringクラスよりも、はるかに高速な文字列操作を行うことができる。

比較プログラム

それぞれ 100000 回、文字列結合を行う。

String
public class Stringvs{
    public static void main(String args[]){
        String str = new String("0");
        String buf = new String("");

        long startTime = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++){
            buf = buf + str;
            if(i % 10000 == 1000){
                System.out.print(".");
                buf = "";
            }
        }
        long endTime = System.currentTimeMillis();

        System.out.println();
        System.out.println((endTime - startTime) + " msec");
    }
}

StringBuffer
public class Stringvs{
    public static void main(String args[]){
        StringBuffer str = new StringBuffer("0");
        StringBuffer buf = new StringBuffer();

        long startTime = System.currentTimeMillis();
        for(int i = 0; i < 10000; i++){
            buf.append(str);
            if(i % 10000 == 1000){
                System.out.print(".");
            }
        }
        long endTime = System.currentTimeMillis();

        System.out.println();
        System.out.println((endTime - startTime) + " msec");
    }
}

比較結果

String
result1

StringBuffer
result2

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール