String vs StringBufferAdvertisement特徴Stringjava.lang.Stringクラスは不変オブジェクトなので、一度設定した値を直接変更することができない。たとえば次のように文字列結合を行った場合、String str = "こん"; str = str + "にちは";"こん"という値を保持しているStringクラスが変更されるのではなく、新たに"こんにちは"という値を持ったStringオブジェクトが生成される。Stringに対して文字列演算を行うたびにオブジェクトが生成されるため、コストが高くなってしまう。 StringBufferjava.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
![]() StringBuffer
Advertisement |
ショートカット・634・このカテゴリのトップページに戻る ・634labs UIコレクションギャラリー サイト検索Y!ログール |