■Java言語の基本 - java.lang.StringBuffer -

■まっしぐらじゃば > ■Java言語の基本

  このページではStringBufferの使い方について書きます。

■目次


■StringBufferインスタンスの作成

    StringBufferインスタンスは主に引数なしまたはバッファできる初期容量を与えて作ります。

StringBuffer buf1 = new StringBuffer();

    パフォーマンスを重視する場合、初期容量を引数にしてインスタンスを作ります。
    これはStringBufferが持つ初期容量16文字分を超えてバッファリングする場合、有効です。
    ちなみに初期容量を超えた場合、自動的に容量が割り当てられます(ただしそれにはコストはかかります)。

/* StringBufferを初期容量を設定し、作成します。 */
    StringBuffer buf2 = new StringBuffer(100);

TOPへ戻る

■StringBufferから文字列の出力

    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());

TOPへ戻る

■色々な値の追加

    StringBufferはStringだけでなく様々な値を取ることができます。

//様々な値を追加してみる。
    StringBuffer buf6 = new StringBuffer();
    buf6.append("string ");
    buf6.append('c');
    buf6.append(6);
    buf6.append(123456789L);
    System.out.println(buf6.toString());

TOPへ戻る

■補足事項:なぜStringBufferが有効なのか?

    「なぜStringBufferが有効なのか?」それはString型はJavaでは非常に特殊なクラスだからです。
    String型は不変クラス(Immutable Class(イミュータブルクラス))の一種です。 つまり状態を変化させる術を持たないクラスです。
    「えっ?」と思うと思いますが、これは事実です。Stringは実は一回インスタンスを作る度に自分のコピーを作り、返しています。
    つまりその度にメモリ(Javaが使用するメモリ空間をヒープと呼びます)を圧迫していきます。ここにStringBufferを使う意義があります。
    StringBufferはStringを大量に作成しメモリ空間を圧迫する以前にバッファリングし、文字列プールに大量のインスタンスを残す事を避けてくれます。
    ここでの説明はこれ以上は避けますが、不変クラスについてはデザインパターンのところで書き記したいと思います。

TOPへ戻る


■変更履歴




(C) 2004 Shot
[FOAF]

免責:このページの内容は私個人の意見及び考えであり、ページの内容に対して一切の責任を負いません。
ツッコミ・叱咤激励等は常時大歓迎です。ぜひこちらの掲示板までどうぞ