[問題] 參考變數的傳遞

看板java作者時間13年前 (2013/02/04 18:44), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/5 (看更多)
大家好,最近在試著學習java,關於參考變數的運用有點疑問,想向各位先進求教: 1 private Node Root; 2 3 public BTree() { 4 Root = null; 5 } 6 7 public void Insert(int TData) { 8 Insert( Root, TData); 9 return ; 10 } 11 12 private void Insert( Node NowNode, int TData) { 13 if(NowNode==null) { 14 NowNode = new Node(); 15 NowNode.Data = TData; 16 } 17 ... 18 return ; 19 } 我本來希望在14與15行改變root的內容,但是這寫法是錯的,上網查閱一些資料後得知 因為 NowNode 只是 root 這個參考的複製品,所以一但脫離 12~19 行這個範圍它就消 失了。 因為 Insert( Node, int) 這個方法會用到遞迴結構,而每次傳入的 Node 都不同,請 問 java 之中有方法可以讓我在 Insert( Node, int) 之中改變 NowNode 的本體嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.212.239

02/04 19:10, , 1F
因為Java是pass by value
02/04 19:10, 1F

02/04 19:36, , 2F
要改BTree下面的Root只能把BTree整個傳進去
02/04 19:36, 2F

02/04 19:38, , 3F
其實我也想說不能直接包一個Linkedlist在class裡面嗎...
02/04 19:38, 3F

02/04 19:41, , 4F
NowNode的本體(object?)本來就可以改,是method caller裡的
02/04 19:41, 4F

02/04 19:43, , 5F
NowNode reference變數不能改
02/04 19:43, 5F

02/05 13:42, , 6F
你把物件(object)跟參考(reference)混為一談了..
02/05 13:42, 6F
文章代碼(AID): #1H3v3pEr (java)
文章代碼(AID): #1H3v3pEr (java)