分別使用使用這三種來拼接字符串,對比各自損耗的時間:
通過測試: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字符,若是超過了,得自動擴容:
自動擴容(建立長度更大得數組,再把以前得數組拷貝到新數組)
此時性能極低,通常得,咱們事先知道大概須要存儲多少字符,在構造器中就應該設置。多線程