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

関連記事

  1. Basic

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

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

  2. Basic

    Java プロパティファイルを使ってテキスト(txt)出力ファイルの書き込みとパターンを解説

    こちらの記事でプロパティファイルを使って出力ファイルの書き込みを応用し…

  3. Basic

    Java クラスのインスタンス化・初期化とは?

    Javaで扱うすべての変数は必ず何らかの型(type)を持っています。…

  4. Basic

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

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

  5. Basic

    Java コンストラクタの使い方と概要

    コンストラクタとは生まれたてのインスタンスの状態を表します。…

コメント

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

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

Recommended Article

Pickup

  1. Eclipse

    Eclipse 背景色を黒(ダーク)に設定する方法を解説!
  2. Spring

    Spring MyBatisのSQL!!IN句を使用する方法とは?
  3. Basic

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

    Strutsの概要
  5. News

    最新Java情報局 Oracleno四半期パッチ公開
PAGE TOP

Copyrighted Image