测试代码
```java
String str=new String("");
StringBuffer buffer=new StringBuffer("");
StringBuilder builder=new StringBuilder("");
long startTime=0L;
long endTime=0L;
startTime=System.currentTimeMillis();
for (int i=0;i<20000;i++){
buffer.append(String.valueOf(i));
}
endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
startTime=System.currentTimeMillis();
for (int i=0;i<20000;i++){
builder.append(String.valueOf(i));
}
endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
``
结果
第一次:
StringBuffer 与 StringBuilder 都继承了父类 AbstractStringBuilder,
StringBuffer 与 StringBuilder 不同的是在方法上加了 synchronized 修饰符,因此说 StringBuffer 适用于多线程,
但是一般情况 StringBuffer 和 StringBuilder 类型的变量都只会在方法内声明,而不会在多线程共享,因此通常不必关心多线程问题,直接使用 StringBuilder 即可,
至于效率问题,因为 JDK 1.6 开始引入了偏向锁、轻量级锁,也就是说 JDK 对 synchronized 做了优化,因此在单线程内 StringBuffer 性能也不会比 StringBuilder 差。
希望对你有帮助。
他俩的区别在于线程安全,你好的弄个多线程环境测试啊,你这测试的还是单线程,所以说你这样测试没有意义,