Java中String/StringBuffer/StringBuilder區別(轉)
1、三者在執行速度方面的比較:StringBuilder > StringBuffer > String
2、String <(StringBuffer,StringBuilder)的原因
String:字串常量
StringBuffer:字串變數
StringBuilder:字串變數
從上面的名字可以看到,String是“字串常量”,也就是不可改變的物件。對於這句話的理解你可能會產生這樣一個疑問 ,比如這段程式碼:
s = s+1;
System.out.print(s);// result : abcd1
我們明明就是改變了String型的變數s的,為什麼說是沒有改變呢? 其實這是一種欺騙,JVM是這樣解析這段程式碼的:首先建立物件s,賦予一個abcd,然後再建立一個新的物件s用來執行第二行程式碼,也就是說我們之前物件s並沒有變化,所以我們說String型別是不可改變的物件了,由於這種機制,每當用String操作字串時,實際上是在不斷的建立新的物件,而原來的物件就會變為垃圾被GC回收掉,可想而知這樣執行效率會有多低。
而StringBuffer與StringBuilder就不一樣了,他們是字串變數,是可改變的物件,每當我們用它們對字串做操作時,實際上是在一個物件上操作的,這樣就不會像String一樣建立一些而外的物件進行操作了,當然速度就快了。
3、一個特殊的例子:
StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你會很驚訝的發現,生成str物件的速度簡直太快了,而這個時候StringBuffer居然速度上根本一點都不佔優勢。其實這是JVM的一個把戲,實際上:
String str = “This is only a” + “ simple” + “test”;
其實就是:
String str = “This is only a simple test”;
所以不需要太多的時間了。但大家這裡要注意的是,如果你的字串是來自另外的String物件的話,速度就沒那麼快了,譬如:
String str2 = “This is only a”; String str3 = “ simple”; String str4 = “ test”; String str1 = str2 +str3 + str4;
這時候JVM會規規矩矩的按照原來的方式去做。
4、StringBuilder與StringBuffer
StringBuilder:執行緒非安全的
StringBuffer:執行緒安全的
當我們在字串緩衝去被多個執行緒使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單執行緒下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。
對於三者使用的總結:
1、如果要操作少量的資料用 = String
2、單執行緒操作字串緩衝區 下操作大量資料 = StringBuilder
3、多執行緒操作字串緩衝區 下操作大量資料 = StringBuffer
參考:
https://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html(以上內容轉自此篇文章)
http://javcoder.iteye.com/blog/1131286(效能分析)
https://stackoverflow.com/questions/355089/difference-between-stringbuilder-and-stringbuffer
https://www.zhihu.com/question/20101840
http://blog.csdn.net/u011146511/article/details/51811068(常用使用方法)
https://www.cnblogs.com/Zombie-Xian/p/6237409.html
==>如有問題,請聯絡我:easonjim#163.com,或者下方發表評論。<==
相關文章
- Java中String,StringBuffer和StringBuilder的區別(轉載)JavaUI
- String、StringBuffer、StringBuilder區別?UI
- String,StringBuffer,StringBuilder區別UI
- java中String、StringBuilder、StringBuffer三者的區別JavaUI
- String, StringBuilder, StringBuffer 之間的區別 - JavaUIJava
- Java中的String,StringBuilder,StringBuffer三者的區別JavaUI
- String,StringBuilder,StringBuffer的區別UI
- String、StringBuilder、StringBuffer的區別UI
- String、StringBuffer、StringBuilder的區別UI
- StringBuilder StringBuffer String的區別(原始碼分析)-javaUI原始碼Java
- String,StringBuffer與StringBuilder的區別UI
- String、StringBuffer、與StringBuilder的區別UI
- String,StringBuffer與StringBuilder的區別??UI
- Android- String、StringBuffer、StringBuilder區別AndroidUI
- String、StringBuffer與StringBuilder之間區別UI
- JAVA中String與StringBuffer的區別Java
- 『Java 語法基礎』String、StringBuffer 與 StringBuilder 的區別JavaUI
- 面試必知:String、StringBuilder、StringBuffer的區別面試UI
- String StringBuffer StringBuilder 三者的區別UI
- Java 之String、StringBuffer 和 StringBuilder 三者區別介紹JavaUI
- 【Java】String、StringBuilder和StringBufferJavaUI
- java String,StringBuilder和StringBufferJavaUI
- [Java]String、StringBuilder和StringBufferJavaUI
- 從原始碼看String,StringBuffer,StringBuilder的區別原始碼UI
- Java中String,StringBuffer,StringBuilder基礎知識JavaUI
- 認識Java中String與StringBuffer以及StringBuilderJavaUI
- StringBuilder、StringBuffer和String三者的聯絡和區別(轉)UI
- Java字串(String_StringBuilder_StringBuffer)Java字串UI
- [轉載] 整理下java中stringBuilder和stringBuffer兩個類的區別JavaUI
- String StringBuffer StringBuilder的區別(前端面試必備)UI前端面試
- stringbuilder和stringbuffer區別UI
- java複習之 String,StringBuffer,StringBuilderJavaUI
- Java 原始碼出發徹底搞懂String與StringBuffer和StringBuilder的區別Java原始碼UI
- StringBuffer和StringBuilder的區別UI
- StringBuilder和StringBuffer的區別UI
- Java的JDK下StringBuffer與StringBuilder的區別JavaJDKUI
- String、StringBuffer、StringBuilder剖析UI
- String、StringBuilder和StringBufferUI