このページではStringBufferの使い方について書きます。
StringBufferインスタンスは主に引数なしまたはバッファできる初期容量を与えて作ります。
StringBuffer buf1 = new StringBuffer();
パフォーマンスを重視する場合、初期容量を引数にしてインスタンスを作ります。
これはStringBufferが持つ初期容量16文字分を超えてバッファリングする場合、有効です。
ちなみに初期容量を超えた場合、自動的に容量が割り当てられます(ただしそれにはコストはかかります)。
/* StringBufferを初期容量を設定し、作成します。 */
StringBuffer buf2 = new StringBuffer(100);
StringBuuferの主な使い方はwhile文やfor文で様々なオブジェクトを
次々と足していく場合などの修正が多くかかる場合に特に有効です。
例えば以下のような場合です。
String[] strs = {
"abc", "bcd", "cde", "def", "efg"
};
StringBuffer buf5 = new StringBuffer();
for(int i=0;i<strs.length;i++){
buf5.append(strs[i]);
}
//バッファに溜まった値を文字列として出力します。
System.out.println(buf5.toString());
StringBufferはStringだけでなく様々な値を取ることができます。
//様々な値を追加してみる。
StringBuffer buf6 = new StringBuffer();
buf6.append("string ");
buf6.append('c');
buf6.append(6);
buf6.append(123456789L);
System.out.println(buf6.toString());
「なぜStringBufferが有効なのか?」それはString型はJavaでは非常に特殊なクラスだからです。
String型は不変クラス(Immutable Class(イミュータブルクラス))の一種です。
つまり状態を変化させる術を持たないクラスです。
「えっ?」と思うと思いますが、これは事実です。Stringは実は一回インスタンスを作る度に自分のコピーを作り、返しています。
つまりその度にメモリ(Javaが使用するメモリ空間をヒープと呼びます)を圧迫していきます。ここにStringBufferを使う意義があります。
StringBufferはStringを大量に作成しメモリ空間を圧迫する以前にバッファリングし、文字列プールに大量のインスタンスを残す事を避けてくれます。
ここでの説明はこれ以上は避けますが、不変クラスについてはデザインパターンのところで書き記したいと思います。
-2004/06/13 新規作成
(C) 2004 Shot
免責:このページの内容は私個人の意見及び考えであり、ページの内容に対して一切の責任を負いません。
ツッコミ・叱咤激励等は常時大歓迎です。ぜひこちらの掲示板までどうぞ