StringBuffer
是同步的, StringBuilder
不是。
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);
}
}
}
一个试运行给出的数字2241 ms
为StringBuffer
VS 753 ms
为StringBuilder
。
基本上, StringBuffer
方法是同步的,而StringBuilder
则不是。
这些操作 “几乎” 相同,但在单个线程中使用同步方法是过度的。
这几乎就是它。
此类 [StringBuilder] 提供与 StringBuffer 兼容的 API, 但不保证同步 。此类设计用作 StringBuffer 的替代品,用于单个线程使用字符串缓冲区的位置(通常情况下)。在可能的情况下,建议首先使用此类优先于 StringBuffer,因为在大多数实现中它会更快。
因此,它取代了它。
Vector
和ArrayList
。