JAVAPRO_IR Telegram 4540
📌موضوع: 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
👍51🗿1



tgoop.com/javapro_ir/4540
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance. Content is editable within two days of publishing Read now How to Create a Private or Public Channel on Telegram? The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously.
from us


Telegram برنامه نویسی جاوا | Java
FROM American