Java中的StringBuffer

來源:互聯網
上載者:User

標籤:ref   start   tps   空間   imp   它的   特定   物件類型   span   

簡介: 

String和StringBuffer都可以儲存和操作字串,即包含多個字元的字串資料。他們的區別就是String類是字串常量,是不可更改的常量。而StringBuffer是字串變數,它的對象是可以擴充和修改的。簡要的說, String 類型和 StringBuffer 類型的主要效能區別其實在於 String 是不可變的對象, 因此在每次對 String 類型進行改變的時候其實都等同於產生了一個新的 String 對象,然後將指標指向新的 String 對象,所以經常改變內容的字串最好不要用 String ,因為每次產生對象都會對系統效能產生影響,特別當記憶體中無引用對象多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。

   而如果是使用 StringBuffer 類則結果就不一樣了,每次結果都會對 StringBuffer 對象本身進行操作,而不是產生新的對象,再改變對象引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字串對象經常改變的情況下。而在某些特別情況下, String 對象的字串拼接其實是被 JVM 解釋成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度並不會比 StringBuffer 對象慢,而特別是以下的字串對象產生中, String 效率是遠要比 StringBuffer 快的:
 String S1 = “This is only a” + “ simple” + “ test”;
 StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
 你會很驚訝的發現,產生 String S1 對象的速度簡直太快了,而這個時候 StringBuffer 居然速度上根本一點都不佔優勢。其實這是 JVM 的一個把戲,在 JVM 眼裡,這個
   String S1 = “This is only a” + “ simple” + “test”; 其實就是:
   String S1 = “This is only a simple test”; 所以當然不需要太多的時間了。但大家這裡要注意的是,如果你的字串是來自另外的 String 對象的話,速度就沒那麼快了,譬如:
  String S2 = “This is only a”;
  String S3 = “ simple”;
  String S4 = “ test”;
  String S1 = S2 +S3 + S4;
這時候 JVM 會規規矩矩的按照原來的方式去做
StringBuffer
Java.lang.StringBuffer安全執行緒的可變字元序列。一個類似於 String 的字串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字元序列,但通過某些方法調用可以改變該序列的長度和內容。
可將字串緩衝區安全地用於多個線程。可以在必要時對這些方法進行同步,因此任意特定執行個體上的所有操作就好像是以串列順序發生的,該順序與所涉及的每個線程進行的方法調用順序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的資料。每個方法都能有效地將給定的資料轉換成字串,然後將該字串的字元追加或插入到字串緩衝區中。append 方法始終將這些字元添加到緩衝區的末端;而 insert 方法則在指定的點添加字元。
例如,如果 z 引用一個當前內容是“start”的字串緩衝區對象,則此方法調用 z.append("le") 會使字串緩衝區包含“startle”,而 z.insert(4, "le") 將更改字串緩衝區,使之包含“starlet”。
方法:

StringBuffer類的建構函式:public StringBuffer():建立一個空的StringBuffer類的對象。

              public StringBuffer(int length): 建立一個長度為length的StringBuffer類的對象(注意:如果參數小於零,將觸發NegativeArraySizeException異常。)。

  public StringBuffer(String str)用一個已有的String建立StringBuffer類的對象。

方法:

  (1)StringBuffer append(Type t):向字串緩衝區追加Type類型的元素t,t可以是布爾量、字元、字元數組、雙精確度數、浮點數、整型數、長整型數物件類型的字串、字串和StringBuffer類等。如果添加的字串超出了字串緩衝區的長度,Java將自動進行擴充。

  (2)int capacity():返回當前StringBuffer對象的總空間,而非字元創號的長度。

  (3)char cahrAt(int index):在當前StringBuffer對象中索引號為index的字元。第一個索引為0。

  (4)StringBuffer delete(int start, int end):刪除當前StringBuffer對象中以索引號start開始,到end結束的子串。

  (5)StringBuffer deleteCharAt(int index):刪除當前StringBuffer對象中索引號為index的字元。

  (6)void ensureCapacity (int minimumCapacity):重新設定字元號串緩衝區的總空間。如果minimumCapacity大於當前的總空間,則新的空間被設定:一種結果是minimumCapacity;另一種結果是{“老空間”乘2加2}。

  (7)void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):從當前StringBuffer對象的索引號srcBegin開始,到srcEnd結束的子串,賦值到字元數組dst中,並且從dst的索引號dstBegin開始。

  (8)int indexOf(String str):返回當前StringBuffer對象中,第一個滿足str子串的位置。

  (9)int indexOf(String str, int fromIndex):從當前StringBuffer對象的fromIndex開始尋找,返回第一個滿足str子串的位置。

  (10)StringBuffer insert(int offset, Type t):這些方法都是在當前StringBuffer對象中插入一個Type類型元素t,在索引號offset處插入t。

  (11)int lastIndexOf(String str):返回當前StringBuffer對象中,最後一個滿足str子串的位置。

  (12)int lastIndexOf(String str, int fromIndex):從當前StringBuffer對象的fromIndex開始尋找,返回最後一個滿足str子串的位置。

  (13)int length():返回當前StringBuffer對象(字元緩衝區)中,字串的長度。注意:此方法與capacity() 不同。

  (14)StringBuffer replace(int start, int end, String str):替換當前StringBuffer對象的字串。從start開始,到end結束的位置替換成str。

  (15)StringBuffer reverse():將字串翻轉。

  (16)void setCharAt(int index, char ch):設定索引號index的字元為ch。

  (17)void setLength(int newLength):重新設定字串緩衝區中字串的長度,如果newLength小於當前的字串長度,將截去多餘的字元。

  (18)String substring(int start):取當前StringBuffer對象中,從start開始到結尾的子串。

  (19)String substring(int start, int end):取當前StringBuffer對象中,從start開始到end的子串。

  (20)String toString():將當前StringBuffer對象轉換成String對象。

簡例: 

public String toString()  轉換為String類對象並返回。由於大多數類中關於顯示的方法的參數多為String類的對象,所以經常要將StringBuffer類的對象轉換為String類的對象,再將它的值顯示出來。用法如:  StringBuffer sb=new StringBuffer("How are you?");  Label l1=new Label(sb.toString());  (註:聲明一個標籤對象l1,l1上的內容為How are you?)  public StringBuffer append( boolean b )  public StringBuffer append( char c )  public StringBuffer append( int i)  public StringBuffer append( long l )  public StringBuffer append( float f )  public StringBuffer append( double d )  以上6個方法可將boolean、char、int、long、float和double 6種類型的變數追加到StringBuffer類的對象的後面。用法如:  double d=123.4567;  StringBuffer sb=new StringBuffer();  sb.append(true);  sb.append(‘c‘).append(d).append(99);  (註:sb的值為truec123.456799)  public StringBuffer append( String str )  將字串常量str追加到StringBuffer類的對象的後面。  public StringBuffer append( char str[] )  將字元數組str追加到StringBuffer類的對象的後面。  public StringBuffer append  ( char str[], int offset, int len )  將字元數組str,從第offset個開始取len個字元,追加到StringBuffer類的對象的後面。  public StringBuffer insert( int offset, boolean b )  public StringBuffer insert( int offset, char c )  public StringBuffer insert( int offset, int i )  public StringBuffer insert( int offset, long l )  public StringBuffer insert( int offset, float f )  public StringBuffer insert( int offset, double d )  public StringBuffer insert( int offset, String str )  public StringBuffer insert( int offset, char str[] )  將boolean、char、int、long、float、double類型的變數、String類的對象或字元數組插入到StringBuffer類的對象中的第offset個位置。用法如:  StringBuffersb=new StringBuffer("abfg");  sb.insert(2,"cde");  (註:sb的值為abcdefg)  public int length()  這個方法返回字串變數的長度,用法與String類的length方法類似。  StringBuffer sbf=new StringBuffer();  System.out.println(sbf.capacity());  System.out.println(sbf.length());  輸出 16 ,0.     預設構造器是由系統自動分配容量,預設是16個字元。由於沒有賦值,所以緩衝對象的長度就是0.  StringBuffer sbf=new StringBuffer(100);設定容量大小的構造器  charAt()方法可以返回字元中的單個字元  setCharAt(0,‘x’) 方法可以對字元中的單個字元進行替換  reverse() 方法可以倒置字串內容。

Java中的StringBuffer

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.