【Java言語】StringBuilderの使い方とメリット

Stringクラスの使い方は皆さんご存知だと思います。しかし、StringBuilderというクラスはご存知でしょうか?

名前は知っているけど使ったことがない
何をするためのクラスなの?
Stringクラスとはどう違うの?

といった疑問が出てくるかと思います。ここではそんな疑問を吹き飛ばしStringBuilderクラスの使い方やStringクラスとの違いを学び実際の開発で使えるようにしてみましょう!

ワンランク上のJavaプログラマを目指す方必見です!

StringBuilderとは

StringBuilderは、Java5.0(Tiger)で新しく導入されたクラスです。そのためそれ以前のバージョンのJava(~Java1.4(Merlin))では使用できないため注意が必要です!

StringBuilderは、一言でいうと、Stringクラス同様、文字列を扱うクラスです。Stringクラスでなく、StringBuildeクラスを使うというのはどのような時なのでしょうか?

まず、Stringクラスについて復習も兼ねてお話しましょう。

Stringクラスについて

Stringクラスの問題点

皆さんも一度は使ったことがあるStringクラスでの文字列扱いは以下の様な実装になります。

public class Main {
 
    public static void main(String[] args) {
    	for(int count = 0;  count  < 100; count++) {
            String cntval = Integer.toString(count);
            String result = "値は" + cntval;
            System.out.println(result);
    	}
    }
}

一見、何の問題もなく処理が動くように見られます。確かに問題なく実行できますがStringクラスが持つ、ある問題がここには潜んでいます。それは、「Stringクラスには一度セットした値を変更することはできない。」という問題です。

問題の原因

JavaのプログラムはVM(仮想マシン)というプログラムを実行するために必要な仕組みが存在します。

Javaでは変数を使用するために宣言を行いますが、宣言を行うことで値を保存しておくためのヒープ(保存スペース)をVMと呼ばれる仕組みの中に確保します。

前項のプログラムのようにループを用いて値をセットしていくような処理の場合、ループ処理で値がセットされる度にこの保存スペースが新しく作り直されます。

そのため無駄に保存スペースを食いつぶし処理速度の低下につながるという問題が起こります。100回、200回程度の処理ですと大した差ではありませんが数万件単位になるとその差は大きくなります。

StringBuilderを使う

そういったいくつかの問題を解決するためにStringBuilderを使ってみましょう。使い方については次のコードを見てみましょう。

class  SamuraiSample {
    public static void main(String[ ] args) {
        StringBuilder val = new StringBuilder();
        for(int count = 0; count < 100; count++) {
            String cntval = Integer.toString(count);
             val.append("値は" + cntval + "\n" );
        }
        System.out.println(new String(val));
    }
}

このプログラムでは最初にStringBuilderのインスタンスを生成しています。for文内では数値を文字列に変換し生成しStringBuilderのインスタン変数valにappendメソッドを使って追加します。

全ての追加が終わった後、printlnメソッドを使い文字列を表示しています。大量に文字列を繋げていく場合にこのappendメソッドを使うことがポイントです!

このようにStringBuilderを使うことで必要最小限の保存スペースだけを使い文字列を連結することができる<のです。

StringBuilderとStringBuffer

StringBufferとは

次にStringBufferについてお話します。StringBufferもStringBuilder同様、文字列を扱うクラスです。StringBufferクラスもStringBuilderクラス同様、Stringクラスが扱えない可変長の文字列の扱いに適しています。

StringBufferとの違いは?

先程StringBufferについて「StringBuilder同様」と記載しましたが、「StringBufferとStringBuilderって何が違うの?」「どちらかひとつでいいじゃん!」と思う方もいるかもしれません。

もちろん、StringBuilder・StringBufferそれぞれのクラスの相違点はあります。一言でいうと、「StringBuilderはシングルスレッド(バッチ処理のような直列処理)向き」「StringBuffferはマルチスレッド(並列処理)向き」ということになります。

シングルスレッドやマルチスレッドについてよくわからないと思う方やStringBufferについては下記で詳しく使い方や違いを説明しています。ぜひ読んでみて下さい!

【5分で分かる】Java言語のStringBufferの使い方とStringBuilderとの違い
更新日 : 2019年5月28日

まとめ

StringBuilderについてお話させて頂きました。StringBuilderについてのおさらいです!

  • Java5.0 以降から使用可能
  • ループ内で文字列の操作(連結や挿入)を行いたいとき

にStringBuilderを使うと良いでしょう。「StringBuilderってなんだったっけ?」 と思ったらぜひこの記事を読み返してください!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

荒井弥生

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説