前言:java常用且基礎的String相關的總結,其中重在說明三者運作效率
String,StringBuffer,StringBuilder,關于這三個類在字元串進行中有什麼優缺點,從下面幾點說明:
1.速度:StringBuilder > StringBuffer > String
String <(StringBuffer,StringBuilder)的原因
String:字元串常量
StringBuffer:字元串變量 StringBuilder:字元串變量
舉例:
1 String s = “chenshi”;
2 s = s+1;
3 System.out.print(s);// result : chenshi1
分析:String是“字元串常量”,也就是不可改變的對象。
以上代碼建立對象s,賦予一個chenshi,然後再建立一個新的對象s用來 執行第二行代碼,也就是說我們之前對象s并沒有變化,還存在,其值任為chenshi。
由于這種機制,每當用String操作字元串時,實際上是在不斷的建立新的對象,而原來的對象就會變為垃圾被GC回收掉,是以其執行效率會底。
而StringBuffer與StringBuilder是字元串變量,是可改變的對象,每當我們用它們對字元串做操作時,實際上是在一個對象上操作的,這樣就不會像String一樣建立一些額外的對象進行操作,速度就快了。
2.一個特殊的例子:
1 String str = “Today” + “ is” + “ great”;
3 StringBuffer builder = new StringBuilder(“Today”).append(“is”).append(“ great”);
他們的速度相當,因為String str = “Today is great”;
和 String str = “Today” + “ is” + “ great”;等同的。
3.StringBuilder與 StringBuffer
StringBuilder:線程非安全的
StringBuffer:線程安全的
當我們在字元串緩沖去被多個線程使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正确操作的。當然大多數情況下就是我們是在單線程下進行的操作,是以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。
總結:
1.如果要操作少量的資料用 = String
2.單線程操作字元串緩沖區 下操作大量資料 = StringBuilder
3.多線程操作字元串緩沖區 下操作大量資料 = StringBuffer