三者都實作了CharSequence接口,因此CharSequence可認為是一個字串的協定介面
1.String類別是不可變類,即一旦一個String物件被創建後,包含在這個對象中的字元序列是不可改變的,直到這個物件被銷毀;
我們常常定義的時候 String str=new String("定義了我");
str=「改變了我」;
輸出是改變了我,好像是Str已經改變了,其實是改變了str的指向,原來堆記憶體裡的物件成為了垃圾
2.StringBuffer類別
StringBuffer代表一個字元序列可變的字串,當一個StringBuffer建立以後,透過inser()、appen()、reverse()、serChaAt()、setLength()方法可以改變這個字串,最終生成以後,可以透過toString()方法轉換成一個String物件
3.StringBuilder是JDK1.5新增的,也代表字串對象,和StringBuffer相似,兩個類別的建構器和方法也基本上相同,當時StringBuffer是線程安全的,StringBulider沒有實現線程安全,所以效能略高。因此,如果建立一個字元可變的字串對象,則應該優先考慮StringBuilder類別
比較
#1.執行速度方面三者有如下關係:
StringBuilder>StringBuffer> String;
2.:一、長度都是可擴充的;二、StringBuffer是線程安全的,StringBuilder是線程不安全的。那麼他們的長度是如何實現動態擴充以及StringBuffer的線程安全是如何實現的呢?
三者都實作了CharSequence接口,因此CharSequence可認為是一個字串的協定介面
StringBuffer裡面所有的方法除了建構方法以外都由synchronized限定
它們兩個可擴展長度則是透過ensureCapacity(int minimumCapacity)來驗證目前長度是否小於參數minimumCapacity,如果成立則進行分配空間。分配新空間的步長為(目前長度+1)的兩倍。
以上是String、StringBuffer、StringBulider三者介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!