📜  C#|字符串vs StringBuilder

📅  最后修改于: 2021-05-29 16:35:13             🧑  作者: Mango

先决条件:C#中的字符串

StringBuilder的用于表示字符的可变的字符串。可变是指可以更改的字符串。所以String对象是不可变的,但StringBuilder是可变的字符串类型。它不会创建当前字符串对象的新修改实例,但会在现有字符串对象中进行修改。 StringBuilder的完整功能由System.Text命名空间中存在的StringBuilder类提供。

需要StringBuilder:如上所述,String类对象是不可变的,这意味着如果用户修改任何字符串对象,将导致创建新的字符串对象。它使字符串的使用成本很高。因此,当用户需要对字符串进行重复操作时,就会出现对StringBuilder的需求。它提供了处理重复和多个字符串操作的优化方法。

例子:

// C# program to demonstrate the
// difference between String,
// StringBuilder
using System;
using System.Text;
using System.Collections;
  
class GFG {
    // Concatenates to String
    public static void concat1(String s1)
    {
  
        // taking a string which
        // is to be Concatenate
        String st = "forGeeks";
  
        // using String.Concat method
        // you can also replace it with
        // s1 = s1 + "forgeeks";
        s1 = String.Concat(s1, st);
    }
  
    // Concatenates to StringBuilder
    public static void concat2(StringBuilder s2)
    {
  
        // using Append method
        // of StringBuilder class
        s2.Append("forGeeks");
    }
  
    // Main Method
    public static void Main(String[] args)
    {
  
        String s1 = "Geeks";
        concat1(s1); // s1 is not changed
        Console.WriteLine("Using String Class: " + s1);
  
        StringBuilder s2 = new StringBuilder("Geeks");
        concat2(s2); // s2 is changed
        Console.WriteLine("Using StringBuilder Class: " + s2);
    }
}

输出:

Using String Class: Geeks
Using StringBuilder Class: GeeksforGeeks

解释:

  • concat1方法的使用:在此方法中,我们传递字符串“ Geeks ”并执行“ s1 = String.Concat(s1,st);”。 st是“ forGeeks ”的并置。从Main()传递的字符串未更改,这是由于String是不可变的。更改字符串的值会创建另一个对象,concat1()中的s1将存储对新字符串的引用。但是Main()concat1()中的引用s1引用了不同的字符串。
  • concat2方法的使用:在此方法中,我们传递了一个字符串“ Geeks”并执行了“ s2.Append(“ forGeeks”)”,该操作将字符串(在Main中)的实际值更改为“ GeeksforGeeks”。这是由于一个简单的事实,即StringBuilder是可变的,因此会更改其值。

何时使用哪一个:

  • 如果字符串在整个程序中保持不变,请使用String类对象,因为String对象是不可变的。
  • 如果字符串可以更改(例如:字符串构造中的大量逻辑和操作),则使用StringBuilder是最佳选择。

将String转换为StringBuilder:
要将String类对象转换为StringBuilder类对象,只需将字符串对象传递给StringBuilder类构造函数即可。

例子:

// C# program to demonstrate the
// conversion from String to StringBuilder.
using System;
using System.Text;
  
class GFG {
  
    // Main Method
    public static void Main(String[] args)
    {
        String str = "Geeks";
  
        // conversion from String object
        // to StringBuilder
        StringBuilder sbl = new StringBuilder(str);
        sbl.Append("ForGeeks");
        Console.WriteLine(sbl);
    }
}

输出:

GeeksForGeeks

将StringBuilder转换为String:
可以使用ToString()方法执行此转换。

例子:

// C# program to demonstrate the
// conversion from String to StringBuilder
using System;
using System.Text;
  
class GFG {
  
    // Main Method
    public static void Main(String[] args)
    {
  
        StringBuilder sbdr = new StringBuilder("Builder");
  
        // conversion from StringBuilder
        // object to String using ToString method
        String str1 = sbdr.ToString();
  
        Console.Write("StringBuilder object to String: ");
        Console.WriteLine(str1);
    }
}

输出:

StringBuilder object to String: Builder