public class StringBufferWithStringBuilder {
public static void testString() {
long start = System.currentTimeMillis();
String str = null;
for (int i = 0; i < 200000; i++) {
str = str + i + "-";
}
System.out.println("String:" + (System.currentTimeMillis() - start));
}
public static void testStringBuffer() {
long start = System.currentTimeMillis();
StringBuffer sbuf = new StringBuffer();
for (int i = 0; i < 200000; i++) {
sbuf.append(i + "-");
}
System.out.println("StringBuffer:" + (System.currentTimeMillis() - start));
}
public static void testStringBulider() {
long start = System.currentTimeMillis();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 200000; i++) {
builder.append(i + "-");
}
System.out.println("StringBuilder:" + (System.currentTimeMillis() - start));
}
public static void main(String agrs[]) {
testString();
testStringBuffer();
testStringBulider();
}
}
执行结果:
执行结果
String:144047
StringBuffer:59
StringBuilder:55
String类用final修饰,不能直接操作,每次都要重新实例化一个新对象。所以效率最低。
StringBuffer和StringBuilder没有用final修饰,所以效率高很多。
StringBuffer是线程安全(synchronized修饰),StringBuilder非线程安全,所以,StringBuffer比StringBuilder效率稍慢一些。