作者icetofux ()
看板java
標題Re: [問題] 參考變數的傳遞
時間Mon Feb 4 23:04:55 2013
感謝你的說明,這台電腦沒有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)
推 PsMonkey:==.=== 請解釋你覺得會消失的理由 02/04 23:25
→ PsMonkey:還有,不重要的部份請用 Ctrl+Y 刪除 02/04 23:25
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)
→ coolcomm:因為nowNode不在stack上 stack上有的只是一個指標而已 02/05 10:02
→ coolcomm:而stack下層還有更多指向nowNode"本體"的指標 02/05 10:04
→ ssccg:用你的說法,是nowNode的reference在stack,但object在heap 02/06 05:00
→ ssccg:nowNode.left是先指到heap上的nowNode,再取出left 02/06 05:02