Re: [問題] 參考變數的傳遞

看板java作者時間13年前 (2013/02/04 23:04), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串3/5 (看更多)
感謝你的說明,這台電腦沒有JDK,明天我會嚐試依此建議來更改寫法,也許是觀念 還不夠透徹,這裡有個小疑問想請教: ※ 引述《kaneson (Lance)》之銘言: : private Node root ; : public BTree() { : root = null ; : } : public void Insert( int data ) { : if ( root == null ) : root = new Node( data ) ; : else : Insert( root, data ) ; : } : private void Insert( Node nowNode, int data ) { : if ( data < nowNode.data ) : if ( nowNode.left == null ) : nowNode.left = new Node( data ) ; ^^^^^^^^^^^^^^^^^^ 離開 Insert( Node, int) 後 nowNode 應該就會消失,這裡建立的物件不就會被gc回收 掉嗎? : else : Insert( nowNode.left, data ) ; : else if ( data > nowNode.data ) : ... : return ; : } 實際動手作跟看書果然是兩回事,看書總覺得好像都懂了,寫起來才發現沒注意到的小 細節好多XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.121.130 ※ 編輯: icetofux 來自: 118.166.121.130 (02/04 23:05)

02/04 23:25, , 1F
==.=== 請解釋你覺得會消失的理由
02/04 23:25, 1F

02/04 23:25, , 2F
還有,不重要的部份請用 Ctrl+Y 刪除
02/04 23:25, 2F
nowNode 在 stack 上,然後藉由 nowNode.left = new Node( data ); 連結到 heap 上 ,當從 Insert( Node, int) 之中 return 後, nowNode 被從 stack 推出, heap 上 的空間就沒人指向它了,所以被 gc 回收。 請問我的觀念是哪個地方開始錯了呢? ※ 編輯: icetofux 來自: 211.72.212.239 (02/05 09:42)

02/05 10:02, , 3F
因為nowNode不在stack上 stack上有的只是一個指標而已
02/05 10:02, 3F

02/05 10:04, , 4F
而stack下層還有更多指向nowNode"本體"的指標
02/05 10:04, 4F

02/06 05:00, , 5F
用你的說法,是nowNode的reference在stack,但object在heap
02/06 05:00, 5F

02/06 05:02, , 6F
nowNode.left是先指到heap上的nowNode,再取出left
02/06 05:02, 6F
文章代碼(AID): #1H3yuPKk (java)
討論串 (同標題文章)
文章代碼(AID): #1H3yuPKk (java)