0

私はSCJP証明書を勉強していて、StringBuilderとStringBuffer APIで遊んでいると、そこで何が起こっているのか理解できない状況がいくつか見つかりました。

これが私のサンプルコードです:

    StringBuffer sb1 = new StringBuffer("sb1");
    StringBuilder sb2 = new StringBuilder("sb2");

    StringBuffer sb11 = new StringBuffer(sb1);
    StringBuilder sb22 = new StringBuilder(sb2);

    StringBuffer sb12 = new StringBuffer(sb2);
    StringBuilder sb21 = new StringBuilder(sb1);

    System.out.println(sb1);
    System.out.println(sb2);
    System.out.println(sb11);
    System.out.println(sb22);
    System.out.println(sb12);
    System.out.println(sb21);

    System.out.println();
    sb1.append("a1");
    sb2.append("a2");

    System.out.println(sb1);
    System.out.println(sb2);
    System.out.println(sb11);
    System.out.println(sb22);
    System.out.println(sb12);
    System.out.println(sb21);

上記のコードを実行した結果は次のとおりです。

sb1
sb2
sb1
sb2
sb2
sb1

sb1a1
sb2a2
sb1
sb2
sb2
sb1

sb11、sb22、sb12、およびsb21に使用されるコンストラクターは、APIに文書化されていません。さらに、結果を見ると、これらの4つのケースでは、StringまたはCharSequenceを許可するコンストラクターが使用されているように見えます。

それが本当なら、なぜJavaはStringBufferを文字列に自動的に変換するのですか?私の知る限り、オートボクシングはそれほど進んでいません。

私は何が欠けていますか?

4

3 に答える 3

6

とは両方ともインターフェースStringBuilderStringBuffer実装し、CharSequence両方ともパラメーターを受け取るコンストラクターを持っていCharSequenceます。

于 2012-09-21T15:23:23.757 に答える
3

StringBuilder両方ともStringBuffer実装しCharSequenceます。

于 2012-09-21T15:22:27.813 に答える
0

どちらもCharSequenceを実装しています。それらの唯一の違いは、StringBufferメソッドが同期されているのに対し、stringBuilderは同期されていないことです。

于 2012-09-21T15:26:28.300 に答える