0 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)
برچسب گذاری دوباره قبل توسط

اگر در جاوا متغییر های ارجاعی بصورت call by reference ارسال می شوند چرا کد زیر اشاره گر(reference) یک پارامتر ارسالی به متد را تغییر نمی دهد؟

    private static class Foo {

        String value;

        public Foo(String value) {
            this.value = value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    public static void main(String[] args) {
        Foo f = new Foo("f");
        System.out.println("before = "+f.getValue());// f
        changeReference(f); 
        System.out.println("after = "+f.getValue()); // f
    }

    public static void changeReference(Foo a) {
        Foo b = new Foo("b");
        a = b;
    }

1 پاسخ

+2 امتیاز
قبل توسط (1.1هزار امتیاز)

جمله "اگر در جاوا متغییر های ارجاعی بصورت call by reference ارسال می شوند" اشتباه است.

در جاوا همیشه مقدار پارامترها به متد ارسال می شود (call by value) و در جاوا call by reference نداریم، برای داده های اولیه مقدار متغییر و برای داده های ارجاعی مقدار آدرس ارجاعی متغییر برای متد ارسال می شود. با این تعریف و شکل های زیر کاملا مشخص می شود که چرا کد بالا عملکرد مورد نظر را ندارد:

سوالات مشابه

+1 امتیاز
1 پاسخ 1.5هزار بازدید
+1 امتیاز
1 پاسخ 447 بازدید
+1 امتیاز
1 پاسخ 675 بازدید
+2 امتیاز
3 پاسخ 2.8هزار بازدید
+1 امتیاز
1 پاسخ 728 بازدید
...