1.String的值是不变的,String变量每修改一次都会生成一个新的对象,效率比较低。
2.StringBuffer的变量只会生成一个新对象,每次修改变量的值,不会再生成新对象,效率比较高,是线程安全的。
3.StringBuilder,和StringBuffer基本同样,区别是StringBuilder不是线程安全的,效率稍微高一点。安全
下面咱们来作一个实验,分别对String、StringBuffer、StringBuilder 的一个变量,作50000次改变,记录改变的时间。app
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)); } }
输出以下ui
testString==============3658 testStringBuffer==============4 testStringBuilder==============2
从这个实验能够看出,StringBuilder 的时间效率比String高1000倍不止啊。线程