看板 java 關於我們 聯絡資訊
感謝你的說明,這台電腦沒有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