読者です 読者をやめる 読者になる 読者になる

StringBuilderで .append()がいくつも続けられる理由

Java

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
戻り値:
オブジェクトへの参照

関連項目:
String.valueOf(java.lang.Object), append(java.lang.String)

Oracle Technology Network for Java Developers

で分かるように戻り値がStringBuilderなのでつまり
sb.append("a")でStringBilderが帰ってくる(仮にsb2)と、sb2.append("bb")
というようにどれも前のStringBilderのappend()メソッドを実装してる。

StringBufferとStringBuilderの違い

書いてあることをそのまま書くと

  • StringBufferはスレッドセーフ(thread-safe)
  • StringBuilderはStringBufferよりも高速

下はまあそのままとして、上もそのままでいいのか?
複数のスレッド参照も安全だと保障するってことだろうか?

今回で謎の部分

  • そもそもオブジェクトが増えることに対する欠点
  • スレッドセーフとは。実際にやってみるか。(授業でスレッド出たら(ぉ
  • Reader,Writerにもよく出てくるBufferっそもそもなんなのさ。

これはもう少し知りたい。