Java

Java StringBuilderの使い方・文字列の連結

Java StringBuilderの使い方・文字列の連結

2つ以上の文字列をつなぐことを、文字列の連結(conacation)といいます。
最も簡単な方法は、Stringクラスで+演算子を用いる方法です。

SPONSORED LINK

ただしStringクラスでは、問題点がある

上記のように問題なく処理が動き、実行結果として出力されていますが、
Stringクラスの文字連結には問題点があります。

それはStringクラスのインスタンスの不変性にあります。
String インスタンスが保持する文字列情報は、インスタンス化した際に初期化されるので、以後二度と変化することはありません。(値の変更不可)

インスタンスについての詳細な説明はここから

Stringクラスに限らず「インスタンス化の後に内容が絶対に変化しない」よう
設計されたクラスのことを  不変であると言います。

上記のように一見Stringインスタンスは中身を書き換える事ができるように見えます。
しかし実際は下記のようなことが起きています。

Helloという文字列情報を持ったStiringインスタンスが大きくなり、
“HelloWord”という情報を持つということは決してありません。
演算子にによる(+)連結が行われた場合は、古いインスタンスは捨てられ連結後の情報を
持つ新しいインスタンがnewにより生成されることになります。

簡潔に説明すると+演算子で処理した回数の文字連結は、
内部でその回数分のnewを行っています。
newによるインスタンス生成は、計算などに比べてJVMに大きな負担がかかる原因となる為、
何百回、何千回、何万回と大きくなるにつれて、全体として遅い処理になってしまいます。

その問題を解決するためにStringBuilderを使います。

SPONSORED LINK


StringBuilderの使い方

new String(sb)やString.valueOf(sb)でもString変換が可能です。
toString メソッドを使って文字列ビルダから文字列を取得するのは、
処理が高速になるので一般的に推奨されています。

StringBuilderやStringBufferは可変なクラスとして設計されています。
newを使用することなくappend()メソッドで文字列を追記していくこと設計に
なっているので高速に処理をすることが可能です。

StringBufferクラスの利用方法はStringBuilderと全く同じになります。

  • String: 不変
  • StringBuilder:可変
  • StringBuffer: 可変


StringBuilderとStringBufferの違いとは?

StringBuilderとStringBufferの違いは、
並列処理を利用しているか利用していないかの場合に使い分けをします。

並列処理とは、複数の処理を同時に行うためのJavaのしくみです。

並列処理を利用している場合に、
StringBuilderクラスを利用すると不具合になる可能性があります。
その為、代わりにStringBufferクラスを使用します。

  • StringBuilder:並列処理 ✕
  • StringBuffer: 並列処理 ○
SPONSORED LINK

ピックアップ記事

  1. Java入門 JavaプラットフォームやJava言語の仕組み
  2. Java 9が正式リリース
  3. Java クラスのインスタンス化・初期化とは?

関連記事

  1. Java

    Java オブジェクト指向の解説・ポリモフィズム(abstract)

    ポリモフィズムは多様性を意味します。傾斜によるメソッドのオーバーラ…

  2. Java

    Java オブジェクト指向の解説・継承

    処理を受け継ぐ「継承」とは以前作成したクラスと似通ったクラスを作成…

  3. Java

    Java 繰り返し処理の使い方-while文 do-while文 for文 拡張for文

    繰り返しの処理を行うこと(ループ)ができる繰り返し文を解説してきます。…

  4. Java

    Java String型とDate型の変換・Calendarの関係性

    現場でも使用頻度が非常に高い日付を扱ったソースについて解説していき…

  5. Java

    Java オブジェクト指向とは?初心者向けにわかりやすい概要!!

    オブジェクト指向の特徴は開発対象となるシステム化対象領域を、「モノ…

  6. Java

    JUnit 入門・基本的な使い方

    JUnitは、Javaで開発されたプログラムのふるまいを検証する為…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Recommended Article

Pickup

  1. News

    脆弱性が多いプログラミング言語、第2位はPHP – 大差で第1位にな…
  2. Servlet・JSP

    Java formの基礎
  3. Java

    Java String型とDate型の変換・Calendarの関係性
  4. Java

    Java リスト(list)を分割(一度に処理を行う)し代入する方法を解説
  5. Basic

    Java EclipseにTomcat(Java EEの開発環境)を設定する手順…
PAGE TOP

Copyrighted Image