JAVAPRO_IR Telegram 4539
📌 مفهوم Pass by Value در جاوا

در جاوا همه‌ی پارامترها به‌صورت Pass by Value (یعنی ارسال مقدار) به متدها منتقل می‌شوند.
اما بسیاری از برنامه‌نویسان در ابتدا فکر می‌کنند جاوا Pass by Reference دارد، چون وقتی یک آبجکت به متد ارسال می‌شود، تغییر روی آن آبجکت در بیرون متد هم دیده می‌شود.

🔎 بیایید دقیق‌تر نگاه کنیم:

اگر نوع‌های ابتدایی (Primitive) مثل int, double, boolean را ارسال کنید، مقدار کپی می‌شود. پس تغییرات داخل متد روی متغیر اصلی اثری ندارد.

اگر آبجکت را ارسال کنید، در واقع کپی آدرس آبجکت (Reference Value) ارسال می‌شود. بنابراین متد می‌تواند به همان آبجکت اشاره کرده و داده‌هایش را تغییر دهد. اما خود رفرنس اصلی کپی شده و تغییرش بی‌اثر است.



📘 مثال ۱ – نوع Primitive:

public class PassByValueDemo {
    public static void main(String[] args) {
        int x = 10;
        changeValue(x);
        System.out.println("x after method: " + x); // خروجی: 10
    }

    static void changeValue(int num) {
        num = 20; // فقط کپی تغییر می‌کند
    }
}

👉 نتیجه: مقدار x تغییر نکرد چون فقط کپی به متد داده شده بود.


📘 مثال ۲ – آبجکت‌ها:

class Person {
    String name;
}

public class PassByValueDemo2 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "Ali";
        changeName(p);
        System.out.println("Person name: " + p.name); // خروجی: Reza
    }

    static void changeName(Person person) {
        person.name = "Reza"; // داده‌ی داخل آبجکت تغییر می‌کند
    }
}

👉 اینجا رشته‌ی name تغییر کرد، چون رفرنس کپی شده به همان آبجکت اشاره داشت.



📘 مثال ۳ – تغییر رفرنس داخل متد:
static void reassignObject(Person person) {
    person = new Person();
    person.name = "Sara";
}

public static void main(String[] args) {
    Person p = new Person();
    p.name = "Ali";
    reassignObject(p);
    System.out.println(p.name); // خروجی: Ali
}

👉 در اینجا مقدار name تغییر نکرد چون رفرنس اصلی کپی شده بود و تغییر رفرنس داخل متد روی متغیر اصلی بی‌اثر است.



نتیجه‌گیری:
جاوا همیشه Pass by Value است، حتی برای آبجکت‌ها. فقط نکته این است که وقتی آبجکت‌ها را پاس می‌دهید، در واقع کپی رفرنس پاس می‌شود، نه خود آبجکت. همین موضوع باعث سردرگمی خیلی‌ها می‌شود.

#کاربرـپیشرفته


🆔 @javapro_ir
🆔 @group_javapro
👍71



tgoop.com/javapro_ir/4539
Create:
Last Update:

📌 مفهوم Pass by Value در جاوا

در جاوا همه‌ی پارامترها به‌صورت Pass by Value (یعنی ارسال مقدار) به متدها منتقل می‌شوند.
اما بسیاری از برنامه‌نویسان در ابتدا فکر می‌کنند جاوا Pass by Reference دارد، چون وقتی یک آبجکت به متد ارسال می‌شود، تغییر روی آن آبجکت در بیرون متد هم دیده می‌شود.

🔎 بیایید دقیق‌تر نگاه کنیم:

اگر نوع‌های ابتدایی (Primitive) مثل int, double, boolean را ارسال کنید، مقدار کپی می‌شود. پس تغییرات داخل متد روی متغیر اصلی اثری ندارد.

اگر آبجکت را ارسال کنید، در واقع کپی آدرس آبجکت (Reference Value) ارسال می‌شود. بنابراین متد می‌تواند به همان آبجکت اشاره کرده و داده‌هایش را تغییر دهد. اما خود رفرنس اصلی کپی شده و تغییرش بی‌اثر است.



📘 مثال ۱ – نوع Primitive:

public class PassByValueDemo {
    public static void main(String[] args) {
        int x = 10;
        changeValue(x);
        System.out.println("x after method: " + x); // خروجی: 10
    }

    static void changeValue(int num) {
        num = 20; // فقط کپی تغییر می‌کند
    }
}

👉 نتیجه: مقدار x تغییر نکرد چون فقط کپی به متد داده شده بود.


📘 مثال ۲ – آبجکت‌ها:

class Person {
    String name;
}

public class PassByValueDemo2 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "Ali";
        changeName(p);
        System.out.println("Person name: " + p.name); // خروجی: Reza
    }

    static void changeName(Person person) {
        person.name = "Reza"; // داده‌ی داخل آبجکت تغییر می‌کند
    }
}

👉 اینجا رشته‌ی name تغییر کرد، چون رفرنس کپی شده به همان آبجکت اشاره داشت.



📘 مثال ۳ – تغییر رفرنس داخل متد:
static void reassignObject(Person person) {
    person = new Person();
    person.name = "Sara";
}

public static void main(String[] args) {
    Person p = new Person();
    p.name = "Ali";
    reassignObject(p);
    System.out.println(p.name); // خروجی: Ali
}

👉 در اینجا مقدار name تغییر نکرد چون رفرنس اصلی کپی شده بود و تغییر رفرنس داخل متد روی متغیر اصلی بی‌اثر است.



نتیجه‌گیری:
جاوا همیشه Pass by Value است، حتی برای آبجکت‌ها. فقط نکته این است که وقتی آبجکت‌ها را پاس می‌دهید، در واقع کپی رفرنس پاس می‌شود، نه خود آبجکت. همین موضوع باعث سردرگمی خیلی‌ها می‌شود.

#کاربرـپیشرفته


🆔 @javapro_ir
🆔 @group_javapro

BY برنامه نویسی جاوا | Java


Share with your friend now:
tgoop.com/javapro_ir/4539

View MORE
Open in Telegram


Telegram News

Date: |

Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week. Activate up to 20 bots The public channel had more than 109,000 subscribers, Judge Hui said. Ng had the power to remove or amend the messages in the channel, but he “allowed them to exist.” As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.” The Standard Channel
from us


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