tgoop.com/javapro_ir/4539
Create:
Last Update:
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