感謝你的說明,這台電腦沒有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
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
02/05 10:02, 3F
→
02/05 10:04, , 4F
02/05 10:04, 4F
→
02/06 05:00, , 5F
02/06 05:00, 5F
→
02/06 05:02, , 6F
02/06 05:02, 6F
討論串 (同標題文章)