Java中StringBuffer和StringBuilder的区别
Java 中的字符串是由 char
数组在内部支持的对象。由于数组是不可变的(不能增长),因此字符串也是不可变的。每当对 String 进行更改时,都会创建一个全新的 String。但是,java 提供了多个可以使用字符串的类。两个这样的类是 StringBuffer
和 StringBuilder
。在本文中,我们来看看这两个类之间的区别。
StringBuffer类: StringBuffer 是 String 的对等类,它提供了字符串的大部分功能。字符串表示固定长度、不可变的字符序列,而 StringBuffer
表示可增长和可写的字符序列。StringBuffer
可能有字符和子字符串插入中间或附加到末尾。它会自动增长以为此类添加腾出空间,并且通常预先分配的字符比实际需要的多,以留出增长空间。为了创建一个字符串缓冲区,需要创建一个对象,(即),如果希望创建一个名为 str 的新字符串缓冲区,那么:
StringBuffer str = new StringBuffer();
示例:以下是实现 StringBuffer 类的示例。
// Java program to demonstrate the StringBuffer class
public class geekdocsDemo {
// 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 geekdocsDemo {
// 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。我们首先需要使用内置方法 toString()
将 StringBuffer 转换为 String 对象。将其转换为字符串对象后,我们可以使用类的构造函数简单地创建一个 StringBuilder。例如:
// Java program to demonstrate the conversion between the StringBuffer and StringBuilder
// class
public class geekdocsDemo {
// Driver code
public static void main(String args[])
{
StringBuffer sbr = new StringBuffer("geekdocs");
// 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);
}
}
运行结果:
geekdocs
从 StringBuilder 到 StringBuffer 的转换
和上面的转换类似,StringBuilder不能直接转换成StringBuffer。首先需要使用内置方法 toString() 将 StringBuilder 转换为 String 对象。现在,可以使用构造函数创建一个 StringBuilder。例如:
// Java program to demonstrate the conversion between the StringBuilder and StringBuffer class
public class geekdocsDemo {
// Driver code
public static void main(String args[])
{
StringBuilder sbr = new StringBuilder("geekdocs");
// 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);
}
}
运行结果:
geekdocs
Java 中的 StringBuilder 与 StringBuffer 对比
StringBuffer类 | StringBuilder类 |
---|---|
StringBuffer 存在于 Java 中。 | StringBuilder 是在 Java 5 中引入的。 |
StringBuffer 是同步的。这意味着多个线程不能同时调用 StringBuffer 的方法。 | StringBuilder 是异步的。这意味着多个线程可以同时调用 StringBuilder 的方法。 |
由于同步,StringBuffer 被称为线程安全类。 | 由于其异步特性,StringBuilder 不是线程安全的类。 |
由于同步,StringBuffer 比 StringBuilder 慢很多。 | 由于没有对多线程进行初步检查,所以 StringBuilder 比 StringBuffer 快很多。 |