1.String的值是不变的,String变量每修改一次都会生成一个新的对象,效率比较低。
2.StringBuffer的变量只会生成一个新对象,每次修改变量的值,不会再生成新对象,效率比较高,是线程安全的。
3.StringBuilder,和StringBuffer基本一样,区别是StringBuilder不是线程安全的,效率稍微高一点。
下面我们来做一个实验,分别对String、StringBuffer、StringBuilder 的一个变量,做50000次改变,记录改变的时间。
public class Test {
public static void main(String[] args) {
testString();
testStringBuffer();
testStringBuilder();
}
public static void testString(){
long start=System.currentTimeMillis();
String str="s";
for(int i=0;i<50000;i++){
str+=i;
}
System.out.println("testString=============="+(System.currentTimeMillis()-start));
}
public static void testStringBuffer(){
long start=System.currentTimeMillis();
StringBuffer str=new StringBuffer("s");
for(int i=0;i<50000;i++){
str.append(i);
}
System.out.println("testStringBuffer=============="+(System.currentTimeMillis()-start));
}
public static void testStringBuilder(){
long start=System.currentTimeMillis();
StringBuilder str=new StringBuilder("s");
for(int i=0;i<50000;i++){
str.append(i);
}
System.out.println("testStringBuilder=============="+(System.currentTimeMillis()-start));
}
}
输出如下
testString==============3658
testStringBuffer==============4
testStringBuilder==============2
从这个实验可以看出,StringBuilder 的时间效率比String高1000倍不止啊。