在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ Java 遞歸調(diào)用里修改引用無效的問題

Java 遞歸調(diào)用里修改引用無效的問題

首先看代碼:

import ds.Trie;

import java.util.Arrays;

/**
 * Created by clearbug on 2018/3/6.
 */
public class Test {

    public static void main(String[] args) {
        Test t = new Test();

        int[] res = new int[1];
        t.dfs(0, res);
        System.out.println(Arrays.toString(res));
    }

    public void dfs(int k, int[] obj) {
        if (k == 5) {
            obj = new int[]{1, 2, 3, 4, 5};
            return;
        }
        dfs(k + 1, obj);
    }
}

控制臺輸出內(nèi)容如下:

[0]

我想問的是,我明明在遞歸調(diào)用里面修改了引用obj obj = new int[]{1, 2, 3, 4, 5},為什么遞歸調(diào)用完成后,引用obj的內(nèi)容未發(fā)生變化呢?

回答
編輯回答
鹿惑

涉及到j(luò)ava的參數(shù)傳遞問題。具體解釋可以參考:

https://www.zhihu.com/questio...

上面說的很詳細(xì)。關(guān)于這塊,通常給這種非基本類型增加一個包裝類處理。

public class Test {

    private static class Wrapper{
        int[] res;

        Wrapper(int[] res){
            this.res = res;
        }
    }

    public static void main(String[] args) {
        Test t = new Test();

        int[] res = new int[1];
        Wrapper wrapper = new Wrapper(res);
        t.dfs(5, wrapper);
        System.out.println(Arrays.toString(wrapper.res));
    }

    public void dfs(int k, Wrapper obj) {
        if (k == 5) {
            obj.res = new int[]{1, 2, 3, 4, 5};
            return;
        }
        dfs(k + 1, obj);
    }
}
2018年5月17日 17:51
編輯回答
舊城人

      public static void main(String[] args) {
            Test t = new Test();

            int[] res = new int[1];
            t.dfs(0, res);
            System.out.println(Arrays.toString(res));
        }

        public void dfs(int k, int[] obj) {
            if (k == 5) {
            //obj和res指向同一個對象,obj = new int[]{1, 2, 3, 4, 5}修改的是obj的引用,不是res的引用,所以res的內(nèi)容不會改變,可以直接修改res的內(nèi)容,例如obj[0]=1;
                //obj = new int[]{1, 2, 3, 4, 5};
               obj[0]=1;
                return;
            }
            dfs(k + 1, obj);
        }
2018年3月27日 07:52