StringBuilder和StringBuffer的区别
StringBuffer和StringBuilder的主要区别是什么? 在决定其中的任何一个时,是否有任何性能问题?
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 API的报价:
这个类[StringBuilder]提供了一个与StringBuffer兼容的API, 但不保证同步 。 此类用于在单个线程正在使用字符串缓冲区的位置(如通常情况下)用作StringBuffer的嵌入式替换。 在可能的情况下,建议将此类优先用于StringBuffer,因为在大多数实现中它会更快。
所以它取而代之。
Vector和ArrayList 。
