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

API 中没有记录用于 sb11、sb22、sb12 和 sb21 的构造函数。此外,从结果来看,这 4 种情况似乎是使用了允许 String 或 CharSequence 的构造函数。

如果是真的,为什么Java会自动将StringBuffer转换成String?据我所知,自动装箱并没有那么远。

我错过了什么?

4

3 回答 3

6

两者都StringBuilder实现StringBufferCharSequence接口,并且都有一个带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 回答