Javaを使う上で、文字列を扱うStringクラスはご存知の方も多いと思いますが、StringBufferクラスは、使ったことがない方も多いのではないでしょうか?
StringBufferもStringと同じく文字列を扱うクラスですが、使い方によって用途が異なります。
どのような時に使えばよいの?
他の文字列を扱うクラスとどう住み分けすればよいのか?
この記事を読めば、これらの疑問が解決できるでしょう。
なお、Javaの記事については、こちらにまとめています。
StringBufferとは
StringBufferクラスは、Stringクラス同様に宣言した変数に文字列を格納するために使用します。
Stringクラスとの違いとして、変数に文字列を格納したあとでも「値を追加」「挿入」「変更」などの、文字列操作が可能なことが挙げられます。
つまり、StringBufferクラスは、文字列の値が「不変である」と分かっているときに、使用するケースが多いと言えます。
StringBufferの使い方
StringBufferは以下のように宣言を記述します。
StringBuffer [変数名] = new StringBuffer("文字列");
実際にStringBufferの簡単な使い方を、以下に紹介します。
public class Main { public static void main(String[] args) throws Exception { // StringBufferを宣言する StringBuffer sStrBuf1 =new StringBuffer("apple"); StringBuffer sStrBuf2 =new StringBuffer("orange"); System.out.println(sStrBuf1); System.out.println(sStrBuf2); // appendメソッドを使用して、文字列を結合する sStrBuf1.append(sStrBuf2); System.out.println(sStrBuf1); // insertメソッドを使用して、文字列” and ”を挿入する sStrBuf1.insert(5, " and "); System.out.println(sStrBuf1); } }
実行結果
apple orange appleorange apple and orange
紹介した例では、StringBuffer型変数sStrBuf1とsStrBuf2を宣言して、文字列を格納しています。
(ここまではString型と同じ)
続いて、変数sStrBuf1にappendメソッドを使って、sStrBuf2を結合しています。出力結果は、sStrBuf1の文字列にsStrBuf2を結合した結果である”appleorange”が表示されます。
また、insertメソッドを使用すれば、文字列に値を挿入することが可能です。使い方は以下。
[StringBuffer型変数名].insert([指定した位置番号],(“挿入文字列”));
出力結果は、sStrBuf1の文字列のインデックス番号5番目から文字列” and ”を挿入しているため、結果は、”apple and orange”が表示されます。
StringBuilderとの違いは?
StringBufferクラスとStringBuilderクラスは、文字列の追加・変更などが行えますが、その違いはなんでしょうか?
違いを一言でいうと、StringBufferはマルチスレッドで、同じStringBufferのインスタンスにアクセスできます。
マルチスレッドとは、複数の処理を並行して進めることを言います。そのため、ユーザーが1つの処理の完了を待たずに次の処理が実行できたり、メモリなどのリソースを節約できるといった利点があります。
StringBuilderは、マルチスレッドに不向き(実行結果が保証されていない)なことが挙げられます。StringBuilderについては次の記事で詳しく解説しています!
まとめ
StringBufferクラスは、Stringクラスと違ってさまざまな文字列操作ができることがわかりました。
- 可変長(データの長さを問わない)であるため、値を繰り返しセットできる
- 値を追加・挿入・変更することができる
- マルチスレッド(並行処理)に対応している
もし、StringBufferの使い方を忘れてしまったら、この記事を思い出してくださいね!