ご存知のように、Javaで文字列を結合する時には ”+”演算子でできる。
こんな風に書ける、ということね。
String s3=s1+s2;
これはコンパイル時に、StringBuilder.appendに書き換えられるわけなんだが、
こんな風に。
4: astore_2
5: new #3; //class java/lang/StringBuilder
8: dup
9: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
12: aload_1
13: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
16: aload_2
17: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: invokevirtual #6; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
23: astore_3
5: new #3; //class java/lang/StringBuilder
8: dup
9: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
12: aload_1
13: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
16: aload_2
17: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: invokevirtual #6; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
23: astore_3
これはJDK1.5以上での話で、もーっと化石なバージョンだと、これは
StringBuffer.appendになる。
StringBufferはMTセーフであるが、Builderはセーフじゃない。
まぁ、こんなテンポラリな短命オブジェクトがMTセーフである必要はないやな。