StringBuilderで .append()がいくつも続けられる理由
StringBuilderとは可変長の文字列のこと。
Javaの場合Stringはオブジェクトで、変更が不可能。
値を変更するとオブジェクト自体が変わっている!
のであとで色々変更する、追加する可能性があるものはStringBufferを使う。
しかしオブジェクトが増えて困るのは、ガーベッジコレクションの処理が増えるから?それともメモリ?
とりあえずString使うよりも、簡単に値の変更は可能だし書きやすい。
.appendの連打
StringBilderを使うときしばしば
class Test{ public static void main(String[] args){ final StringBuilder sb = new StringBuilder(128); sb.append("a").append("bb").append("ccc").append("dddd"); System.out.println(sb.toString()); }
というような.appendが続く時がある。これは
append
public StringBuilder append(Object obj)
Object 引数の文字列表現を追加します。
引数は、String.valueOf メソッドによって変換される場合と同じように文字列に変換され、その文字列の文字がこのシーケンスに追加されます。
パラメータ:
obj - Object
戻り値:
オブジェクトへの参照関連項目:
Oracle Technology Network for Java Developers
String.valueOf(java.lang.Object), append(java.lang.String)
で分かるように戻り値がStringBuilderなのでつまり
sb.append("a")でStringBilderが帰ってくる(仮にsb2)と、sb2.append("bb")
というようにどれも前のStringBilderのappend()メソッドを実装してる。
StringBufferとStringBuilderの違い
書いてあることをそのまま書くと
- StringBufferはスレッドセーフ(thread-safe)
- StringBuilderはStringBufferよりも高速
下はまあそのままとして、上もそのままでいいのか?
複数のスレッド参照も安全だと保障するってことだろうか?
今回で謎の部分
- そもそもオブジェクトが増えることに対する欠点
- スレッドセーフとは。実際にやってみるか。(授業でスレッド出たら(ぉ
- Reader,Writerにもよく出てくるBufferっそもそもなんなのさ。
これはもう少し知りたい。