ความแตกต่างหลักคือ StringBuilder เปลี่ยนแปลงได้ ในขณะที่ สตริงไม่เปลี่ยนรูป
สตริงนั้นเปลี่ยนไม่ได้, ไม่เปลี่ยนรูปหมายความว่าถ้าคุณสร้างวัตถุสตริง คุณจะไม่สามารถแก้ไขมันได้ และสร้างวัตถุประเภทสตริงใหม่ในหน่วยความจำเสมอ
ในทางกลับกัน 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:ในวิธีนี้ เรากำลังส่งสตริง "สวัสดี" และดำเนินการ "systemString =String.Concat(systemString, appendString);" โดยที่ appendString คือ "โลก" ที่จะต่อกัน สตริงที่ส่งจาก Main() ไม่มีการเปลี่ยนแปลง เนื่องจาก String ไม่เปลี่ยนรูป . การเปลี่ยนแปลงค่าของสตริงจะสร้างวัตถุอื่นและ systemString ใน StringConcat() เก็บข้อมูลอ้างอิงของสตริงใหม่ . แต่ระบบอ้างอิงสตริงใน Main() และ StringConcat() อ้างอิงถึงสตริงที่แตกต่างกัน
-
การใช้เมธอด StringBuilderConcat:ในวิธีนี้ เรากำลังส่งสตริง “สวัสดี” และดำเนินการ “stringBuilderString.Append(" World");” ซึ่งเปลี่ยนค่าที่แท้จริงของสตริง (ใน Main) เป็น "Hello World" นี่เป็นเพราะข้อเท็จจริงง่ายๆ ที่ StringBuilder เปลี่ยนแปลงได้และด้วยเหตุนี้จึงเปลี่ยนค่า