در این مقاله فرض میکنیم که شما اطلاعات حدودی از Java Collections دارید.
این سلسله مقالات که برای تکمیل مقاله Java Collections - Everything You MUST Know نوشته شده برای بهبود و درک بهتر collectionها و مواردی که به طور روزمره دارید استفاده میکنید نوشته شده لطفا تمام این دسته بندی رو برای درک بهتر مطالعه کنید .
در جاوا، سه کلاس اصلی برای کار با دادههای متنی وجود دارد: String، StringBuilder و StringBuffer. هر یک از این کلاسها ویژگیها و کاربردهای خاص خود را دارند.
String
غیرقابل تغییر (Immutable): هنگامی که یک شیء از نوع String ایجاد میشود، مقدار آن نمیتواند تغییر کند. هر عملیاتی که به نظر میرسد یک رشته را تغییر میدهد، در واقع یک رشته جدید ایجاد میکند و مرجع آن را به متغیر اصلی اختصاص میدهد.
String Pool:
رشتههای لیترالی (مانند "Hello") در یک ناحیه خاص از حافظه به نام String Pool ذخیره میشوند. اگر رشتهای با همان مقدار قبلاً در String Pool وجود داشته باشد، مرجع همان شیء به متغیر جدید اختصاص مییابد. این ویژگی باعث صرفهجویی در حافظه و افزایش کارایی میشود.
کاربرد: برای نمایش دادههای متنی که نیازی به تغییر ندارند، مانند نامها، آدرسها و غیره.
StringBuilder
قابل تغییر (Mutable): برخلاف String، اشیاء از نوع StringBuilder را میتوان پس از ایجاد تغییر داد. این ویژگی باعث میشود که StringBuilder برای عملیات الحاق و دستکاری رشتهها بسیار کارآمد باشد.
بدون همگامسازی: StringBuilder برای استفاده در محیطهای تکنخی بهینه شده است.
کاربرد: برای ساخت رشتههای طولانی یا زمانی که نیاز به تغییر مکرر یک رشته دارید، از StringBuilder استفاده میشود.
StringBuffer
قابل تغییر (Mutable): مانند StringBuilder، اشیاء از نوع StringBuffer نیز قابل تغییر هستند.
همگامسازی: StringBuffer برای استفاده در محیطهای چندنخی طراحی شده است و عملیات آن همگامسازی میشوند تا از مشکلات همزمانی جلوگیری شود.
کاربرد: زمانی که نیاز به تغییر رشتهها در یک محیط چندنخی دارید، از StringBuffer استفاده میشود.
جدول مقایسه
خلاصه
String: برای دادههای متنی ثابت و مقایسه رشتهها استفاده میشود.
StringBuilder: برای ساخت و دستکاری رشتهها در محیطهای تکنخی بهینه شده است.
StringBuffer: برای ساخت و دستکاری رشتهها در محیطهای چندنخی استفاده میشود.
مثال خیلی ساده :
String s1 = "Hello"
String s2 = "World"
String s3 = s1 + " " + s2; // ایجاد یک رشته جدید
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String s4 = sb.toString();
در مثال بالا، s3 یک رشته جدید ایجاد میکند، در حالی که sb یک رشته را به صورت تدریجی میسازد.
چه زمانی از کدام کلاس استفاده کنیم؟
اگر نیاز به یک رشته ثابت دارید، از String استفاده کنید.
اگر نیاز به ساخت یا تغییر رشتههای طولانی دارید و در یک محیط تکنخی کار میکنید، از StringBuilder استفاده کنید.
اگر نیاز به ساخت یا تغییر رشتههای طولانی دارید و در یک محیط چندنخی کار میکنید، از StringBuffer استفاده کنید.
نکته: در اکثر موارد، StringBuilder به دلیل کارایی بالاتر، ترجیح داده میشود. مگر اینکه به طور مشخص به همگامسازی نیاز داشته باشید.