2012-09-21 38 views
0

我正在学习SCJP证书,并在玩StringBuilder和StringBuffer API时发现了一些情况,我无法理解那里发生了什么。为什么新的StringBuffer(新的StringBuilder(“foo”))能够工作?

这里是我的示例代码:

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会自动转换String中的StringBuffer?据我所知Autoboxing并没有那么远。

我错过了什么?

+2

如果你想看看你在IDE中使用哪个构造函数或方法,你可以在构造函数中使用''+''。 –

回答

6

StringBuilderStringBuffer都实现了CharSequence接口,并且都有一个构造函数,其参数为CharSequence

3

StringBuilderStringBuffer都执行CharSequence

0

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

相关问题