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

    JUnit 入門・基本的な使い方

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

  2. Java

    Java JREとJDKの違いと関係性は!?環境変数設定と確認までの手順解説!!

    そもそも、JREとJDKの違いを人に説明できますか?Javaのプロ…

  3. Java

    Java String型の文字列をint型の数値に変換する方法を解説

    こちらの記事でString型の文字列をint型の数値に変換する方法を応…

  4. Java

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

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

  5. Java

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

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

  6. Java

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

    こちらの記事でリスト(list)を分割(一度に処理を行う)し代入する方…

コメント

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

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

Recommended Article

Pickup

  1. Java

    JUnit 入門・基本的な使い方
  2. Java

    Java 文字列をequalsで比較判定する方法
  3. Java

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

    Javaが更に進化!? 今後の日本生活に貢献する役割を担う!
  5. Java

    Java入門・JDKのインストール方法(Windows編)
PAGE TOP

Copyrighted Image