صادق خانزادی
صادق خانزادی
خواندن ۳ دقیقه·۴ ماه پیش

StringBuilder vs StringBuffer vs String in java


در این مقاله فرض میکنیم که شما اطلاعات حدودی از Java Collections دارید.

این سلسله مقالات که برای تکمیل مقاله Java Collections - Everything You MUST Know نوشته شده برای بهبود و درک بهتر collectionها و مواردی که به طور روزمره دارید استفاده میکنید نوشته شده لطفا تمام این دسته بندی رو برای درک بهتر مطالعه کنید .

Mutable VS Immutable in java

StringBuilder vs StringBuffer vs String

Integer vs int

HashMap vs TreeMap vs Set

Heap And Stack

Memory Heap vs Memory Leak

Integer Constant Pool

Integer Pool vs String Pool

Ternary Operator

Autoboxing



در جاوا، سه کلاس اصلی برای کار با داده‌های متنی وجود دارد: 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 = &quotHello&quot String s2 = &quotWorld&quot String s3 = s1 + &quot &quot + s2; // ایجاد یک رشته جدید StringBuilder sb = new StringBuilder(); sb.append(&quotHello&quot); sb.append(&quot &quot); sb.append(&quotWorld&quot); String s4 = sb.toString();

در مثال بالا، s3 یک رشته جدید ایجاد می‌کند، در حالی که sb یک رشته را به صورت تدریجی می‌سازد.

چه زمانی از کدام کلاس استفاده کنیم؟

  • اگر نیاز به یک رشته ثابت دارید، از String استفاده کنید.
  • اگر نیاز به ساخت یا تغییر رشته‌های طولانی دارید و در یک محیط تک‌نخی کار می‌کنید، از StringBuilder استفاده کنید.
  • اگر نیاز به ساخت یا تغییر رشته‌های طولانی دارید و در یک محیط چندنخی کار می‌کنید، از StringBuffer استفاده کنید.

نکته: در اکثر موارد، StringBuilder به دلیل کارایی بالاتر، ترجیح داده می‌شود. مگر اینکه به طور مشخص به همگام‌سازی نیاز داشته باشید.


منتظر نگاه های زیباتون هستم .

موفق و پیروز باشید.

stringjava
Java Developer - Technical Team Lead At Dotin
شاید از این پست‌ها خوشتان بیاید