मुख्य अंतर यह है कि StringBuilder म्यूटेबल (परिवर्तनीय) है जबकि String इम्यूटेबल (अपरिवर्तनीय) है।
String इम्यूटेबल है, इम्यूटेबल का अर्थ है कि यदि आप स्ट्रिंग ऑब्जेक्ट बनाते हैं तो आप इसे संशोधित नहीं कर सकते और यह हमेशा मेमोरी में स्ट्रिंग प्रकार का नया ऑब्जेक्ट बनाता है।
दूसरी ओर, StringBuilder म्यूटेबल है। मतलब, यदि हम एक स्ट्रिंग बिल्डर ऑब्जेक्ट बनाते हैं तो हम इन्सर्ट, रिप्लेस या अपेंड जैसे किसी भी ऑपरेशन को हर बार नया इंस्टेंस बनाए बिना कर सकते हैं। यह मेमोरी में एक ही स्थान पर स्ट्रिंग को अपडेट करता है और मेमोरी में नई जगह नहीं बनाता।
उदाहरण
using System;
using System.Text;
class DemoApplication{
public static void Main(String[] args){
String systemString = "Hello";
StringConcat(systemString);
Console.WriteLine("String Class Result: " + systemString);
StringBuilder stringBuilderString = new StringBuilder("Hello");
StringBuilderConcat(stringBuilderString);
Console.WriteLine("StringBuilder Class Result: " + stringBuilderString);
}
public static void StringConcat(String systemString){
String appendString = " World";
systemString = String.Concat(systemString, appendString);
}
public static void StringBuilderConcat(StringBuilder stringBuilderString){
stringBuilderString.Append(" World");
}
}
आउटपुट
उपरोक्त उदाहरण का आउटपुट निम्नानुसार है:
String Class Result: Hello StringBuilder Class Result: Hello World
StringConcat मेथड का उपयोग: इस मेथड में, हम "Hello" स्ट्रिंग पास कर रहे हैं और "systemString = String.Concat(systemString, appendString);" कर रहे हैं जहां appendString " World" है जिसे जोड़ा जाना है। Main() से पास की गई स्ट्रिंग नहीं बदली जाती, यह इस तथ्य के कारण है कि String इम्यूटेबल है। स्ट्रिंग का मान बदलने से एक और ऑब्जेक्ट बनता है और StringConcat() में systemString नई स्ट्रिंग का रेफरेंस स्टोर करता है। लेकिन Main() और StringConcat() में systemString रेफरेंस अलग-अलग स्ट्रिंग्स को संदर्भित करते हैं।
StringBuilderConcat मेथड का उपयोग: इस मेथड में, हम "Hello" स्ट्रिंग पास कर रहे हैं और "stringBuilderString.Append(" World");" कर रहे हैं जो Main में स्ट्रिंग के वास्तविक मान को "Hello World" में बदल देता है। यह इस साधारण तथ्य के कारण है कि StringBuilder म्यूटेबल है और इसलिए अपना मान बदलता है।