私は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を文字列に自動的に変換するのですか?私の知る限り、オートボクシングはそれほど進んでいません。
私は何が欠けていますか?