文字列

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

数の定義・数の構成について前のページ

JUnit 入門・基本的な使い方次のページ

ピックアップ記事

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

関連記事

  1. 文字列

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

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

  2. 文字列

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

    文字列を比較する際に使用するequalsメソッドについて解説し…

  3. 文字列

    Java 文字列を分割後(split)にリスト化(List)する方法も解説

    こちらの記事で文字列を分割後(split)にリスト化(List)する方…

  4. 文字列

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

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

  5. 文字列

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

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

コメント

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

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

Recommended Article

Pickup

  1. Class・Object

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

    Java formの基礎
  3. Basic

    Java入門 JavaプラットフォームやJava言語の仕組み
  4. 制御文

    Java 繰り返し処理の使い方-while文 do-while文 for文 拡張…
  5. コマンド

    Linuxコマンド【source】現在のプロセスでファイルを実行するコマンド【b…
PAGE TOP

Copyrighted Image