问题
StringBuffer
和StringBuilder
之间的主要区别是什么?在决定其中任何一个时,是否存在任何性能问题?
#1 热门回答(1441 赞)
StringBuffer
是同步的,StringBuilder
不是。
#2 热门回答(661 赞)
StringBuilder
比StringBuffer
快,因为它不是synchronized
。
这是一个简单的基准测试:
public class Main {
public static void main(String[] args) {
int N = 77777777;
long t;
{
StringBuffer sb = new StringBuffer();
t = System.currentTimeMillis();
for (int i = N; i --> 0 ;) {
sb.append("");
}
System.out.println(System.currentTimeMillis() - t);
}
{
StringBuilder sb = new StringBuilder();
t = System.currentTimeMillis();
for (int i = N; i > 0 ; i--) {
sb.append("");
}
System.out.println(System.currentTimeMillis() - t);
}
}
}
Atest run为StringBuilder
提供2241 ms
的数字,StringBuilder
提供753 ms
的数字。
#3 热门回答(226 赞)
基本上,StringBuffer
方法是同步的,而StringBuilder
则不同步。
这些操作“几乎”相同,但在单个线程中使用同步方法是矫枉过正的。
这很关键。
这个类[StringBuilder]提供了与StringBuffer兼容的API,但不保证同步。此类设计用作StringBuffer的替代品,用于单个线程使用字符串缓冲区的位置(通常情况下)。在可能的情况下,建议首先使用此类优先于StringBuffer,因为在大多数实现中它会更快。
所以它取而代之。
Vector
和ArrayList
也是如此。