Help us understand the problem. What is going on with this article?

StringBuilderクラスについて

More than 1 year has passed since last update.

はじめに

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入門 実践編

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

atsuk0r0
Javaの人。。 どんどんアウトプットしていきますのでご指摘していただきますと非常に嬉しいです。 勉強している方、熱意のある方と繋がりたいです。
https://note.com/atsuk0r0
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away