1. 程式人生 > >String、StringBuilder和StringBuffer的區別和用法

String、StringBuilder和StringBuffer的區別和用法

分別使用使用這三種來拼接字串,對比各自損耗的時間:
經過測試:

package com.test;

public class Main{

    public static void main(String[] args){
        testString();
        testStringBuffer();
        testStringBuilder();
    }
    private static void testStringBuilder() {
        long begin = System.currentTimeMillis();
        StringBuilder str = new StringBuilder("");
        for (int i = 0; i < 30000; i++) {
            str.append(i);
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("-------------StringBuilder效能快--------------");
        System.out.println(time);
    }
    private static void testStringBuffer() {
        long begin = System.currentTimeMillis();
        StringBuffer str = new StringBuffer("");
        for (int i = 0; i < 30000; i++) {
            str.append(i);
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("------------StringBuffer安全的---------------");
        System.out.println(time);
    }
    //String 做做字串拼接的時候,效能極低,每次拼接的時候物件改變
    public static void testString(){
        long begin = System.currentTimeMillis();
        String str = "";
/*      for (int i = 0; i < 30000; i++) {
            str += i;
        }*/
        for(Integer i =0; i< 30000; i++){
            str += i.toString();
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("-----------String----------------");
        System.out.println(time);
    }
}

結論:以後拼接字串,統統使用StringBuffer/StringBuilder,不要使用String。

String和StringBuilder以及StringBuffer的區別:
StringBuffer和StringBuilder都表示可變的字串,功能方法都是相同的。

唯一的區別(建議使用StringBuilder):
StringBuffer:StringBuffer中的方法都使用synchronized修飾符,表示同步的在多執行緒併發的時候可以保證執行緒安全,保證執行緒安全的時候,效能(速度)較低。
StringBuilder:StringBuilder沒有使用synchronized修飾符,不安全,但效能高。
StringBuilder sb = new StringBuilder ()等價於…new StringBuilder(16)(API可見..) 使用StringBUilder無引數的構造器,在底層建立一個長度為16的char陣列:
char[] value = new char[16];
此時該陣列只能儲存16字元,如果超過了,得自動擴容:
自動擴容(建立長度更大得陣列,再把之前得陣列拷貝到新陣列)
此時效能極低,一般得,我們事先知道大概需要儲存多少字元,在構造器中就應該設定。