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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。