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.6هزار بازدید
+1 امتیاز
1 پاسخ 505 بازدید
+1 امتیاز
1 پاسخ 778 بازدید
+2 امتیاز
3 پاسخ 3.2هزار بازدید
+1 امتیاز
1 پاسخ 840 بازدید
...