بسم الله الرحمن الرحیم
به دلیل اینکه جاوا از مفهوم رشتههای لیترال(string literal) استفاده میکند.
اگر بخواهیم لیترال را دقیق تر تعریف کنیم اینگونه آن را تعریف خواهیم کرد : هر مقدار ثابتی را که بتوان در متغیر ذخیره کرد لیترال می گویند لیترال ها بدون هیچ گونه محاسبه ای مستقیماً در کد نشان داده می شوند . به مثال زیر توجه کنید :
/ Here 100 is a constant/literal.
int x = 100;
String s = "Salam"
در این مثال 100 یک لیترال عددی است.
و رشته ی “salam” هم یک شی لیترال رشته ای هست .
اشیای رشته ای لیترال در جاوا در استخر استرینگ( String pool ) ذخیره می شوند .
اگر بخواهیم یک رشته لیترال جدید ایجاد کنیم جی وی ام string pool را بررسی می کند اگر از آن رشته قبلا وجود داشته باشد نشانی حافظه آن را برمی گرداند و اگر وجود نداشته باشد یکی می سازد و نشانی آن را برمی گرداند .
فرض کنید ۵ متغیر رشته ای لیترال داریم که همگی یک مقدار "Salam"دارند در نتیجه همگی به یک شیء رشته ای لیترال به نام "Salam"در string pool اشاره میکنند.
اگر یک متغیر مقدار شیء را تغییر دهد، این تغییر بر تمامی متغیرهای مرجع تاثیر میگذارد. برای جلوگیری از این کار ، اشیای رشتهای در جاوا تغییرناپذیر هستند.
پستی دیگر از این نویسنده :