为什么新的StringBuffer(新的StringBuilder(“foo”))有效?

时间:2012-09-21 15:20:09

标签: java scjp

我正在学习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

API中没有记录用于sb11,sb22,sb12和sb21的构造函数。此外,看看结果,似乎对于这4个案例,承认String或CharSequence的构造函数是使用的。

如果是,为什么Java会自动转换字符串中的StringBuffer?据我所知,Autoboxing并没有走得那么远。

我错过了什么?

3 个答案:

答案 0 :(得分:6)

StringBuilderStringBuffer都实现了CharSequence接口,并且都有一个带CharSequence参数的构造函数。

答案 1 :(得分:3)

StringBuilderStringBuffer都实施CharSequence

答案 2 :(得分:0)

它们都实现了CharSequence。它们之间的唯一区别是StringBuffer方法是同步的,而stringBuilder不是