String、StringBuffer與StringBuilder之間區別

634828354發表於2017-08-16
1.執行速度:StringBuilder >  StringBuffer  >  String  
2.

String <(StringBuffer,StringBuilder)的原因
    String:是字串常量
    StringBuffer:是字串變數
    StringBuilder:是字串變數
3.

StringBuilder:執行緒非安全的

StringBuffer:執行緒安全的

當我們在字串緩衝區被多個執行緒使用時,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單執行緒下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。



總結:

1.如果要操作少量的資料用 String。

2.在單執行緒操作字串緩衝區下,操作大量資料用 StringBuilder。

3.在多執行緒操作字串緩衝區下操作大量資料,需要保證執行緒安全的時候用 StringBuffer。

4.Java8中預設已經使用StringBuilder拼接字串,所以以後使用+即可,而不需要使用StringBuilder類了。

注意:
疑問1.   
  1. String s = "abcd";
  2. s = s+1;
  3. System.out.print(s);
Sting不是字串常量嗎,那這裡為什麼可以變動?

解釋:

其實這是一種欺騙,JVM是這樣解析這段程式碼的:首先建立物件s,賦予一個abcd,然後再建立一個新的物件s用來執行第二行程式碼,也就是說我們之前物件s並沒有變化,所以我們說String型別是不可改變的物件了,由於這種機制,每當用String操作字串時,實際上是在不斷的建立新的物件,而原來的物件就會變為垃圾被GC回收掉,可想而知這樣執行效率會有多低。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30046312/viewspace-2143666/,如需轉載,請註明出處,否則將追究法律責任。

相關文章