Java 中的 Strings 是由 char 數組內部支持的 objects。由於數組是不可變的(不能增長),因此字符串也是不可變的。每當對字符串進行更改時,就會創建一個全新的字符串。然而,java提供了多個可以使用字符串的類。兩個這樣的類是 StringBuffer 和 StringBuilder。在本文中,我們將看到這兩個類之間的區別。
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 快很多。 |
相關用法
- Java StringBuffer deleteCharAt(int index)用法及代碼示例
- Java StringBuffer.offsetByCodePoints()用法及代碼示例
- Java StringBufferInputStream available()用法及代碼示例
- Java StringBufferInputStream reset()用法及代碼示例
- Java StringBufferInputStream skip()用法及代碼示例
- Java StringBuffer append()用法及代碼示例
- Java StringBuffer appendCodePoint()用法及代碼示例
- Java StringBuffer codePointAt()用法及代碼示例
- Java StringBuffer codePointBefore()用法及代碼示例
- Java StringBuffer codePointCount()用法及代碼示例
- Java StringBuffer delete()用法及代碼示例
- Java StringBuffer deleteCharAt()用法及代碼示例
- Java StringBuffer ensureCapacity()用法及代碼示例
- Java StringBuffer getChars()用法及代碼示例
- Java StringBuffer indexOf()用法及代碼示例
- Java StringBuffer insert()用法及代碼示例
- Java StringBuffer lastIndexOf()用法及代碼示例
- Java StringBuffer offsetByCodePoints()用法及代碼示例
- Java StringBuffer replace()用法及代碼示例
- Java StringBuffer reverse()用法及代碼示例
- Java StringBuffer setLength()用法及代碼示例
- Java StringBuffer subSequence()用法及代碼示例
- Java StringBuffer substring()用法及代碼示例
- Java StringBuffer toString()用法及代碼示例
- Java StringBuffer trimToSize()用法及代碼示例
注:本文由純淨天空篩選整理自KaashyapMSK大神的英文原創作品 Difference Between StringBuffer and StringBuilder in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。