+2 امتیاز
قبل در برنامه نویسی توسط (130 امتیاز)
برچسب گذاری دوباره قبل توسط
می‌خواستم بپرسم که نحوه‌ی ارجاع پارامتر در جاوا به چه صورتی هست دقیقا؟ مثلا call by reference هست یا call by value؟
قبل توسط (1.1هزار امتیاز)
+1
فکر کنم این جواب توضیح کاملی داده:
https://javabyab.com/4465/?show=4532#a4532

1 پاسخ

+6 امتیاز
قبل توسط (1.4هزار امتیاز)
ویرایش شده قبل توسط
 
بهترین پاسخ

در جاوا همه چیز call by value است، ولی این برای نوع‌داده‌های primitive و اشیا (object) متفاوت است:

  1. برای نوع‌داده‌‌های primitive، به صورت call by value است: یعنی دقیقا مقادیر در پارامترها کپی می‌شود.
  2. برای اشیا call by reference value هست: یعنی مقدار پاس شده برای یک پارامتر، reference آن است.

مثال swap:

public static void swap(Integer x, Integer y)
{
    Integer t = x;
    x = y;
    y = t;
}

public static void main(String[] args)
{
    Integer a = 5;
    Integer b = 1;
    swap(a, b);
    System.out.println("a: " + a);
    System.out.println("b: " + b);
}
    
outputs:
    a: 5
    b: 1

توی عکس زیر مراحل تغییر reference ها اومده (چپ به راست). پس در واقع کاری که این تابع می‌کنه بازی با reference هاست و نه swap! (دایره کوچک: متغیر، فلش: reference، دایره بزرگ: حافظه تخصیصی به متغیر)

 

مثال 2:

public static void f(A x, B y){
    x = new A(null);
    y.setI(2);
}

public static void main(String[] args){
    A a = new A("s");
    B b = new B(3);
    f(a,b);
    System.out.println("A.a: " + a.getT());
    System.out.println("B.b: " + b.getI());
}

outputs:
    A.a: s
    B.b: 2 

class A{
    private String t;
    public A(String t){
        this.t = t;
    }
    //setter and getter
}

class B{
    private Integer i;
    public B(Integer i){
        this.i = i;
    }
    //setter and getter
}

توی عکس زیر مراحل تغییر reference ها اومده (چپ به راست):

 

 

 

قبل توسط (1.2هزار امتیاز)
ممنونم که بلاخره یکنفر به صورت درست این موضوع رو شرح داد که ما در جاوا فقط call by value داریم و اونچیزی که به نام call by refrence ازش نام برده شده تو کتاب های متعدد چیزی جز کپی کردن مقدار آدرس ارجاع نیست !

سوالات مشابه

+1 امتیاز
1 پاسخ 787 بازدید
+1 امتیاز
1 پاسخ 508 بازدید
+2 امتیاز
1 پاسخ 967 بازدید
+1 امتیاز
1 پاسخ 618 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط Reza.R (851 امتیاز)
0 امتیاز
1 پاسخ 350 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط Reza.R (851 امتیاز)
+1 امتیاز
1 پاسخ 526 بازدید
...