1. 程式人生 > >String、StringBuffer與StringBuilder之間區別

String、StringBuffer與StringBuilder之間區別

安全 .com 學習 ron img build tro ges 變量

  大家在最初結束String字符串的時候,都會被教做認為String是不可變的字符串常量,是不可改變的常量。但是我們看下面的一個列子:

技術分享

  為什麽會發生這種情況呢?難道最開始我們學習的就是錯誤的?

  JVM是這樣解析的,首先創建一個變量s,賦值為abcd,然後在創建一個新的對象來執行第二段語句。這個時候的s就不是最開始的s了。也就是說之前的s並沒有變化,所以我們說String是不可改變的字符常量,改變的是新NEW出的對象。在做字符串操作的時候,實際上是在不停的創建新的對象,然後將之前的對象回收。

  而StringBuffer與StringBuilder就不一樣了,他們是字符串變量,是可改變的對象,每當我們用它們對字符串做操作時,實際上是在一個對象上操作的,這樣就不會像String一樣創建一些而外的對象進行操作了,當然速度就快了。

  2.StringBuilder與 StringBuffer

    StringBuilder:線程非安全的

    StringBuffer:線程安全的

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

 

對於三者使用的總結: 1.如果要操作少量的數據用 = String

           2.單線程操作字符串緩沖區 下操作大量數據 = StringBuilder

           3.多線程操作字符串緩沖區 下操作大量數據 = StringBuffer

String、StringBuffer與StringBuilder之間區別