String、StringBuilder、StringBuffer 區別

public static void testStringBuffer(){
    long start System currentTimeMillis();
    StringBuffer sbuf = new StringBuffer();
    for(int=0;i<20000;i++){
    sbuf.append(i+",");
  }
System.out.println(System, currentTimeMillis()- start);
}
public static void teststringBulider(){   long start = System currentTimeMillis();   StringBuilder builder = new StringBuilder(   for (int i =0; i< 20000: i++)(     builder. append(i +",");     System, out. printIn(System. currentTimeMilliso- start);
    }
  }
public static void main(String[] args){   teststring(); teststringBuffer();   teststringBulider();
  }

 區別一:性能安全

運行結果以下:1217  9  6多線程

從測試結果看出, String類每次追加字符串都會建立新的對象,消耗的時間最長,性能極差。app

而 String Buffer和 String Builder每次追加字符串都是同一個對象,消耗的時間極短,性能良好。ide

而 String Buffer比 String builder消耗時間長一點點,這又是什麼緣由呢?別看急,繼續往下看,性能

區別二:線程是否安全測試

· String:線程不安全    · String Buffer:線程安全     · String Builder:線程不安全ui

String Buffer和 String Builder的使用幾乎徹底相同,惟一的區別就是線程安全性不一樣。spa

正是由於 String Buffer是線程安全的(支持同步鎖),因此性能比String Builder稍差一點。線程

能夠看到 String Builder速度是最快的,但當在多線程中使用 String Builder的操做是不安全的,而但 String Buffer是能夠正確操做的。code

固然大多數狀況下就是咱們是在單線程下進行的操做,因此大多數狀況下是建議用 String Builder而不用String Buffer的。

 

總結:

1.若是要操做少許的數據使用 String。

2 多線程操做字符串緩衝區下操做大量數據使用 String Buffe。

3.單線程操做字符串緩衝區下操做大量數據使用 String Builde。

相關文章
相關標籤/搜索