當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java StringBuffer和StringBuilder的區別用法及代碼示例


Java 中的 Strings 是由 char 數組內部支持的 objects。由於數組是不可變的(不能增長),因此字符串也是不可變的。每當對字符串進行更改時,就會創建一個全新的字符串。然而,java提供了多個可以使用字符串的類。兩個這樣的類是 StringBuffer 和 StringBuilder。在本文中,我們將看到這兩個類之間的區別。

Difference-between-StringBuffer-and-StringBuilder-in-Java

StringBuffer 類:StringBuffer 是 String 的同級類,提供了字符串的許多函數。字符串表示固定長度、不可變的字符序列,而StringBuffer表示可增長且可寫的字符序列。 StringBuffer 可以在中間插入或附加到末尾的字符和子字符串。它會自動增長,為此類添加騰出空間,並且通常會預先分配比實際需要更多的字符,以留出增長空間。為了創建一個字符串緩衝區,需要創建一個對象,(即),如果我們希望創建一個名為 str 的新字符串緩衝區,則:

StringBuffer str = new StringBuffer();

例子:以下是實現 StringBuffer 類的示例。


// Java program to demonstrate 
// the StringBuffer class 
  
public class GFG { 
  
    // Driver code 
    public static void main(String args[]) 
    { 
  
        // Creating a new StringBuffer 
        StringBuffer str 
            = new StringBuffer("Hello"); 
  
        str.append(" World!"); 
  
        System.out.println(str); 
    } 
} 
輸出:
Hello World!

StringBuilder類:與StringBuffer類似,Java中的StringBuilder表示可變的字符序列。由於 Java 中的 String 類創建了不可變的字符序列,因此 StringBuilder 類提供了 String 類的替代方案,因為它創建了可變的字符序列。 StringBuilder 的函數與 StringBuffer 類非常相似,因為它們都通過創建可變的字符序列來提供 String 類的替代方案。與 StringBuffer 類似,為了創建一個名為 str 的新字符串,我們需要創建一個 StringBuilder 對象,(即):

StringBuilder str = new StringBuilder(); 

例子:以下是實現 StringBuilder 類的示例。


// Java program to demonstrate 
// the StringBuilder class 
  
public class GFG { 
  
    // Driver code 
    public static void main(String args[]) 
    { 
  
        // Creating a new StringBuilder 
        StringBuilder str 
            = new StringBuilder("Hello"); 
  
        str.append(" World!"); 
  
        System.out.println(str); 
    } 
} 
輸出:
Hello World!

從 StringBuffer 轉換為 StringBuilder

StringBuffer 無法直接轉換為 StringBuilder。我們首先需要使用內置方法將StringBuffer轉換為String對象toString()。將其轉換為字符串對象後,我們可以使用以下命令簡單地創建一個StringBuilder構造函數類的。例如:


// Java program to demonstrate 
// the conversion between the 
// StringBuffer and StringBuilder 
// class 
  
public class GFG { 
  
    // Driver code 
    public static void main(String args[]) 
    { 
        StringBuffer sbr 
            = new StringBuffer("Geeks"); 
  
        // Conversion from StringBuffer 
        // object to the String object 
        String str = sbr.toString(); 
  
        // Creating a new StringBuilder 
        // using the constructor 
        StringBuilder sbl 
            = new StringBuilder(str); 
  
        System.out.println(sbl); 
    } 
} 
輸出:
Geeks

從 StringBuilder 轉換為 StringBuffer

與上麵的轉換類似,StringBuilder不能直接轉換為StringBuffer。我們首先需要使用內置方法toString()將StringBuilder轉換為String對象。現在,我們可以使用構造函數創建一個StringBuilder。例如:


// Java program to demonstrate 
// the conversion between the 
// StringBuilder and StringBuffer 
// class 
  
public class GFG { 
  
    // Driver code 
    public static void main(String args[]) 
    { 
        StringBuilder sbr 
            = new StringBuilder("Geeks"); 
  
        // Conversion from StringBuilder 
        // object to the String object 
        String str = sbr.toString(); 
  
        // Creating a new StringBuffer 
        // using the constructor 
        StringBuffer sbl 
            = new StringBuffer(str); 
  
        System.out.println(sbl); 
    } 
} 
輸出:
Geeks

Java 中的 StringBuilder 與 StringBuffer

StringBuffer 類 StringBuilder 類
StringBuffer 存在於 Java 中。 StringBuilder 是在 Java 5 中引入的。
StringBuffer已同步。這意味著多個線程不能同時調用StringBuffer的方法。 StringBuilder 是異步的。這意味著多個線程可以同時調用StringBuilder的方法。
由於同步,StringBuffer被稱為線程安全類。 由於其異步性質,StringBuilder 不是線程安全類。
由於同步,StringBuffer 比 StringBuilder 慢很多。 由於沒有對多線程進行初步檢查,StringBuilder 比 StringBuffer 快很多。


相關用法


注:本文由純淨天空篩選整理自KaashyapMSK大神的英文原創作品 Difference Between StringBuffer and StringBuilder in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。