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: |

Telegram Channels requirements & features Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram. A few years ago, you had to use a special bot to run a poll on Telegram. Now you can easily do that yourself in two clicks. Hit the Menu icon and select “Create Poll.” Write your question and add up to 10 options. Running polls is a powerful strategy for getting feedback from your audience. If you’re considering the possibility of modifying your channel in any way, be sure to ask your subscribers’ opinions first. Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel. With the sharp downturn in the crypto market, yelling has become a coping mechanism for many crypto traders. This screaming therapy became popular after the surge of Goblintown Ethereum NFTs at the end of May or early June. Here, holders made incoherent groaning sounds in late-night Twitter spaces. They also role-played as urine-loving Goblin creatures.
from us


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