رسول مدنی
رسول مدنی
خواندن ۱ دقیقه·۵ ماه پیش

چرا اشیای رشته‌ای (string objects) در جاوا تغییر‌ناپذیر (immutable) هستند؟

بسم الله الرحمن الرحیم


چرا اشیای رشته‌ای (string objects) در جاوا تغییر‌ناپذیر (immutable) هستند؟


به دلیل اینکه جاوا از مفهوم رشته‌های لیترال(string literal) استفاده می‌کند.

اگر بخواهیم لیترال را دقیق تر تعریف کنیم اینگونه آن را تعریف خواهیم کرد : هر مقدار ثابتی را که بتوان در متغیر ذخیره کرد لیترال می گویند لیترال ها بدون هیچ گونه محاسبه ای مستقیماً در کد نشان داده می شوند . به مثال زیر توجه کنید :

/ Here 100 is a constant/literal.

int x = 100;

String s = "Salam"

در این مثال 100 یک لیترال عددی است.

و رشته ی “salam” هم یک شی لیترال رشته ای هست .

اشیای رشته ای لیترال در جاوا در استخر استرینگ( String pool ) ذخیره می شوند .

اگر بخواهیم یک رشته لیترال جدید ایجاد کنیم جی وی ام string pool را بررسی می کند اگر از آن رشته قبلا وجود داشته باشد نشانی حافظه آن را برمی گرداند و اگر وجود نداشته باشد یکی می سازد و نشانی آن را برمی گرداند .

String literal
String literal


فرض کنید ۵ متغیر رشته ای لیترال داریم که همگی یک مقدار "Salam"دارند در نتیجه همگی به یک شیء رشته ای لیترال به نام "Salam"در string pool اشاره می‌کنند.

اگر یک متغیر مقدار شیء را تغییر دهد، این تغییر بر تمامی متغیرهای مرجع تاثیر می‌گذارد. برای جلوگیری از این کار ، اشیای رشته‌ای در جاوا تغییر‌ناپذیر هستند.


پستی دیگر از این نویسنده :‌

https://vrgl.ir/JXYId
جاوا
برنامه نویس جاوا
شاید از این پست‌ها خوشتان بیاید