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

関連記事

  1. Java

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

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

  2. Java

    Eclipse Javaプロジェクトの作成と初期設定を解説!!ビルド(build)とは?

    Eclipseで初期設定が終わったらProjectを作成していきます。…

  3. Java

    Java yyyyMMddからyyyy/MM/ddへ変換して日付判定する方法

    データベースから日付情報A(char長8)の文字列を取得して日付の判定…

  4. Java

    Java ファイルやディレクトリの存在チェック(exists)とパターンを解説

    こちらの記事でファイルやディレクトリの存在チェック(exists)を応…

  5. Java

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

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

コメント

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

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

Recommended Article

Pickup

  1. Java

    Java入門 JavaプラットフォームやJava言語の仕組み
  2. Java

    Java インストールしたJREとEclipseを連動させる(設定)手順を解説!…
  3. JavaScript

    JavaScriptの仕組み
  4. News

    最新Java情報局 Oracleno四半期パッチ公開
  5. Java

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

Copyrighted Image