2017年05月29日

文字列の結合の細かい話

ご存知のように、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


これはJDK1.5以上での話で、もーっと化石なバージョンだと、これは
StringBuffer.appendになる。
StringBufferはMTセーフであるが、Builderはセーフじゃない。

まぁ、こんなテンポラリな短命オブジェクトがMTセーフである必要はないやな。

posted by koteitan at 17:37| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック