String、StringBuilder和StringBuffer的區別和用法

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

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字符,若是超過了,得自動擴容:
自動擴容(建立長度更大得數組,再把以前得數組拷貝到新數組)
此時性能極低,通常得,咱們事先知道大概須要存儲多少字符,在構造器中就應該設置。多線程

相關文章
相關標籤/搜索