はじめに
StringBuilderクラスで文字列連結する方法を把握していなかったため
知識を定着させるために今回まとめてみました。
説明
まずStringクラスはImmutable(不変)なクラスです。
そのため+演算子で文字列連結するたびにメモリ上の領域が
広がってStringインスタンスが大きくなる訳ではありません。
仕組みとしては文字列を追加したり、変更するたびに
新しいStringクラスを生成されています。
つまり内部で何度もインスタンス化をしているので
JVMに負荷がかかり処理が遅くなります。
「+」を用いた文字列連結は、メモリを無駄に消費している。
この問題を解決し、文字列連結を滞りなく行えるクラスが
StringBuilderクラスやStringBufferクラスです。
これらのクラスはmutable(可変)なクラスです。
append()メソッドによる文字連結は「+」による文字列連結に
比べて非常に効率がいい処理が可能となります。
今回はStringBuilderについてまとめます。
サンプルコード
流れとしては下記のようになります。
-
append()メソッドの実引数に値を入れて呼び出し、
バッファに文字列を追加していく。 -
最後にtoString()メソッドを呼び出して
完成した文字列を取り出す。
余談:バッファには緩衝という意味がある。
あと記憶領域という意味合いも持つ。
サンプルコード
public class Main {
public static void main(String[] args) {
/*
* StringBuilderクラスをインスタンス化
* デフォルトで16文字分の容量(バッファ)を持つ。
*/
StringBuilder sb = new StringBuilder();
//① append()メソッドを呼び、バッファに文字列を追加する
sb.append("白ご飯,");
sb.append("味噌汁,");
sb.append("卵焼き,");
sb.append("納豆");
//② toString()呼び出し、文字列を取り出す。
String morning = sb.toString();
System.out.println(morning);
}
}
出力結果
白ご飯,味噌汁,卵焼き,納豆
###メソッドチェーン
またappend()メソッドは戻り値が特殊です。
//メソッド宣言
public StringBuilder append(String str)
・戻り値の解説:このオブジェクトへの参照
バッファに文字列を追加するためだけなら戻り値はvoidでも
構わないと思いますが、あえて「自分自身」を戻り値として
返すのは次のような呼び方を可能にするためです。
StringBuilder sb = new StringBuilder();
sb.append("白ご飯,").append("ラーメン,").append("餃子");
このようにして自身への参照を返すメソッドを連続して
呼び出す方法をメソッドチェーンと言います。
##さいごに
今まで文字列連結は+演算子で行ってきたので
少し戸惑いました(ズブの素人丸出し。。。笑)。
でもこのクラスを使うことで処理が格段に上がるのなら
1日でも早く使いこなせるようになりたいと思ってます!!
本当に「習うより慣れろ!」ですね笑
##参考
※上記の書籍を購入時は書籍の後ろのページで第○刷なのか確認する。
最新版を購入するようにしてください!