1. 程式人生 > >StringBuilder類詳解和String、StringBuffer、StringBuilder的操作效對比

StringBuilder類詳解和String、StringBuffer、StringBuilder的操作效對比

StringBuilder類詳解和String、StringBuffer、StringBuilder的操作效對比

1. StringBuilder類

  1. StringBuilder 和 StringBuffer 非常類似,均代表可變的字元序列,而且方法也一樣
    ① String:不可變字元序列
    ② StringBuffer:可變字元序列、效率低、執行緒安全
    ③ StringBuilder(JDK1.5):可變字元序列、效率高、執行緒不安全

    ④ 點選進入StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法
  2. String使用陷阱:
    string s=“a”; //建立了一個字串 s=s+“b”; //實際上原來的"a"字串物件已經丟棄了,現在又產生了一個字串s+“b”(也就是"ab")。如果多次執行這些改變串內容的操作,會導致大量副本字串物件存留在記憶體中,降低效率。如果這樣的操作放到迴圈中,會極大影響程式的效能。

2. 比較一下String、StringBuffer、StringBuilder三者在插入的時候的效率。

  1. 對比Demo
	//對比String,StringBuffer、StringBuilder三者之間的插入效率
	@Test
	public void test1() {
		//定義String、StringBuffer、StringBuilder物件
		String text = "";
		long startTime = 0L;
		long endTime = 0L;
		StringBuffer buffer = new StringBuffer("");
		StringBuilder builder = new StringBuilder("");
		//往StringBuffer物件裡面新增20000個字元
		startTime = System.currentTimeMillis();
		for(int i = 0;i<20000;i++){
		buffer.append(String.valueOf(i));}
		endTime = System.currentTimeMillis();
		System.out.println("StringBuffer的執行時間:"+(endTime-startTime));
		//往StringBuilder物件裡面新增20000個字元
		startTime = System.currentTimeMillis();
		for(int i = 0;i<20000;i++){
		builder.append(String.valueOf(i));}
		endTime = System.currentTimeMillis();
		System.out.println("StringBuilder的執行時間:"+(endTime-startTime));
		//往String物件新增20000個字元
		startTime = System.currentTimeMillis();
		for(int i = 0;i<20000;i++){
		text = text + i;}
		endTime = System.currentTimeMillis();
		System.out.println("String的執行時間:"+(endTime-startTime));
	}
  1. 輸出結果
    輸出結果
  2. 得出結論是:操作效率:StringBuilder》StringBuffer》String