当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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