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倍不止啊。線程