tgoop.com/javapro_ir/4540
Create:
Last Update:
Last Update:
📌موضوع: Immutable Objects در جاوا و ارتباط آن با Pass by Value
در جاوا بعضی از کلاسها Immutable هستند؛ یعنی بعد از ساخته شدن، حالت داخلی آنها دیگر تغییر نمیکند.
معروفترین نمونهی Immutable در جاوا، کلاس String است.
🔎 ویژگی اصلی Immutable این است که اگر به نظر برسد در حال تغییر دادن شیء هستیم، در واقع یک شیء جدید ساخته میشود و رفرنس متغیر به آن اشاره میکند.
📘 مثال ۱ – رشتهها (String):
public class ImmutableDemo {
public static void main(String[] args) {
String s = "Ali";
changeString(s);
System.out.println("Original: " + s); // خروجی: Ali
}
static void changeString(String str) {
str = str + " Reza"; // شیء جدید ساخته میشود
System.out.println("Inside method: " + str); // خروجی: Ali Reza
}
}
👉 چرا خروجی نهایی هنوز
Ali
است؟چون شیء رشته تغییر نکرد، بلکه یک String جدید ساخته شد و فقط رفرنس محلی (
str
) در متد به آن اشاره کرد.📘 مثال ۲ – مقایسه با Mutable Object (مثل StringBuilder):
public class MutableDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Ali");
changeBuilder(sb);
System.out.println("After method: " + sb); // خروجی: Ali Reza
}
static void changeBuilder(StringBuilder builder) {
builder.append(" Reza"); // همان شیء تغییر میکند
}
}
👉 این بار شیء تغییر کرد، چون StringBuilder یک کلاس Mutable است.
✅ نتیجهگیری:
* جاوا همیشه Pass by Value است، اما رفتار Immutable vs Mutable تعیین میکند که دادهها "به ظاهر" تغییر میکنند یا نه.
* در مورد Immutableها مثل String، هر تغییری منجر به ساخت یک شیء جدید میشود.
* در مورد Mutableها مثل StringBuilder یا ArrayList، تغییرات مستقیماً روی همان شیء اثر میگذارد.
#کاربرـپیشرفته
🆔 @javapro_ir
🆔 @group_javapro
BY برنامه نویسی جاوا | Java
Share with your friend now:
tgoop.com/javapro_ir/4540