LoginSignup
21
22

More than 5 years have passed since last update.

StringBuilderクラスについて

Last updated at Posted at 2018-12-11

はじめに

StringBuilderクラスで文字列連結する方法を把握していなかったため

知識を定着させるために今回まとめてみました。

説明

まずStringクラスはImmutable(不変)なクラスです。

そのため+演算子で文字列連結するたびにメモリ上の領域が

広がってStringインスタンスが大きくなる訳ではありません。

仕組みとしては文字列を追加したり、変更するたびに

新しいStringクラスを生成されています。

つまり内部で何度もインスタンス化をしているので

JVMに負荷がかかり処理が遅くなります。

「+」を用いた文字列連結は、メモリを無駄に消費している。

この問題を解決し、文字列連結を滞りなく行えるクラスが

StringBuilderクラスStringBufferクラスです。

これらのクラスはmutable(可変)なクラスです。

append()メソッドによる文字連結は「+」による文字列連結に

比べて非常に効率がいい処理が可能となります。

今回はStringBuilderについてまとめます。

サンプルコード

流れとしては下記のようになります。

  1. append()メソッドの実引数に値を入れて呼び出し、
    バッファに文字列を追加していく。

  2. 最後にtoString()メソッドを呼び出して
    完成した文字列を取り出す。

余談:バッファには緩衝という意味がある。
   あと記憶領域という意味合いも持つ。 

サンプルコード

Main.java
public class Main {

    public static void main(String[] args) {

        /*
         * StringBuilderクラスをインスタンス化
         * デフォルトで16文字分の容量(バッファ)を持つ。
         */
        StringBuilder sb = new StringBuilder();

        //① append()メソッドを呼び、バッファに文字列を追加する

        sb.append("白ご飯,");

        sb.append("味噌汁,");

        sb.append("卵焼き,");

        sb.append("納豆");

        //② toString()呼び出し、文字列を取り出す。
        String morning = sb.toString();

        System.out.println(morning);
    }

}

出力結果

Main.java
白ご飯,味噌汁,卵焼き,納豆

メソッドチェーン

またappend()メソッドは戻り値が特殊です。

APIドキュメント参照.java
//メソッド宣言
public StringBuilder append(String str)

・戻り値の解説:このオブジェクトへの参照

バッファに文字列を追加するためだけなら戻り値はvoidでも

構わないと思いますが、あえて「自分自身」を戻り値として

返すのは次のような呼び方を可能にするためです。

Sample.java
StringBuilder sb = new StringBuilder();
sb.append("白ご飯,").append("ラーメン,").append("餃子");

このようにして自身への参照を返すメソッドを連続して

呼び出す方法をメソッドチェーンと言います。

さいごに

今まで文字列連結は+演算子で行ってきたので

少し戸惑いました(ズブの素人丸出し。。。笑)。

でもこのクラスを使うことで処理が格段に上がるのなら

1日でも早く使いこなせるようになりたいと思ってます!!

本当に「習うより慣れろ!」ですね笑

参考

Java入門 実践編

※上記の書籍を購入時は書籍の後ろのページで第○刷なのか確認する。
最新版を購入するようにしてください!

21
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22