String StringBuilder

String StringBuilder

類 String 表示字元串, 比如“ abc ”。 類 StringBuilder 表示可改變大小的字元序列( sequence of characters ),多個字元組成字元序列,字元序列和字元串是同一個意思。二者的區別在於, String 類型的字元串是常量,字元串創建出來後不允許修改。而 StringBuilder 類型的字元串是可修改的。

基本介紹

  • 中文名:String StringBuilder
  • 外文名:字元串 字元串構建
  • JDK:JDK1.0 JDK1.5
  • 範疇:Java 程式語言
類說明
類 StringBuilder 表示可改變大小的字元序列( sequence of characters ),多個字元組成字元序列,字元序列和字元串是同一個意思。該類所提供的 API 和類 StringBuffer 提供的 API 是兼容的。區別在於,類 StringBuffer 的 API 是同步的,即是執行緒安全的,而類 StringBuilder 的 API 不是同步的,即執行緒不安全的。通常來說,若聲明的字元串出現單執行緒的環境,即不是執行緒共享的環境,不存線上程安全的問題,應該使用類 StringBuilder 代替類 StringBuffer ,這是類 StringBuilder 設計的初衷。理由是,類 StringBuilder 的大多數 API 的運行速度要快於類 StringBuffer 所對應的 API 。但再次強調,類 StringBuilder 的 API 是執行緒不安全的。
類 StringBuilder 有兩個核心的 API ,分別是 append 和 insert 。前者的功能是在原來的字元串的尾部追加指定的字元串,後者的功能是在原來的字元串的指定位置插入指定的字元串。
比如,現在有個 StringBuilder 類型的字元串[ start ],聲明為
String StringBuilder
StringBuilder z = new StringBuilder("start"); 
那么,
z.append("le") 等於 startle 
表示在原來字元串[ start ]的尾部追加字元串[ le ]。
z.insert(4, "le")  等於 starlet
表示在原來字元串[ start ]的偏移量為 4 的位置,插入指定的字元串[ le ],原先處於偏移量為 4 以及之後的所有字元,全部向後移動,騰出空間插入指定的字元串[ le],如右圖所示。
package cn.test;public class Test00 {    public static void main(String[] args) {        // 輸出 startle         // StringBuilder z = new StringBuilder("start");        // System.out.println(z.append("le"));                // 輸出 starlet         StringBuilder z = new StringBuilder("start");        System.out.println(z.insert(4, "le"));    }}
由此可見, z.append("x") 和 z.insert(z.length(), "x") 的效果是一樣的,二者都是把字元串添加原先字元串的尾部。
package cn.test;public class Test {    public static void main(String[] args) {        // 輸出 startx        StringBuilder z = new StringBuilder("start");         System.out.println(z.append("x"));                // 輸出 startx        // StringBuilder z = new StringBuilder("start");         // System.out.println(z.insert(z.length(), "x"));    }}
每個 StringBuilder 類型的字元串都有一個空間,具備一定容量用來存放字元串。若是字元串的長度很長,空間已經無法存放得下字元串,那么,該空間的容量會自動變大。
在多執行緒環境下, StringBuilder 類型的字元串是執行緒不安全的。也就是說,多個執行緒共享同一個 StringBuilder 類型的字元串,會引發執行緒安全的問題。若是需要保證字元串是執行緒安全的,使用 StringBuffer 代替StringBuilder 。
創建StringBuilder 實例的時候,不能傳遞一個 null 對象作為實參,否則會拋出異常NullPointerException ,如下所示:
StringBuilder z = new StringBuilder(null);// Exception in thread "main" java.lang.NullPointerException
在 JDK 1.5 定義了StringBuilder 這個類。

相關詞條

熱門詞條

聯絡我們