ความแตกต่างหลักคือ 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 เปลี่ยนแปลงได้และด้วยเหตุนี้จึงเปลี่ยนค่า