Java中StringBuffer和StringBuilder的区别

Java中StringBuffer和StringBuilder的区别

Java 中的字符串是由 char 数组在内部支持的对象。由于数组是不可变的(不能增长),因此字符串也是不可变的。每当对 String 进行更改时,都会创建一个全新的 String。但是,java 提供了多个可以使用字符串的类。两个这样的类是 StringBufferStringBuilder。在本文中,我们来看看这两个类之间的区别。

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 快很多。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程