String,StringBuffer,StringBuilder的异同:
1.String为定长的,StringBuffer,StringBuilder为可变长,缓冲区满了会成倍扩容。
2.StringBuffer为线程安全的,StringBuilder为非线性安全。
由stringbuffer的源码可见方法都加上了synchronized锁,势必对性能有所影响。

3.StringBuffer和StringBuilder均继承了AbstractStringBuilder类,StringBuffer和StringBuilder初始化字符串缓存区方法相同。
只举stringbuffer的例子,stringbuilder类似,可见源码。
StringBuffer str1 = new StringBuffer();
此时初始化构造一个没有字符串的缓存区,初始容量默认为16字符。
StringBuffer str2 = new StringBuffer(str);
此时初始化构造一个内容为str的字符串缓冲区。字符串缓冲区的初始容量是(16+str.length)字符。
4.StringBuffer和StringBuilder的toString()方法均需要占用新的内存,内存大小为字符串的大小。