作者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)
1F:推 PsMonkey:==.=== 请解释你觉得会消失的理由 02/04 23:25
2F:→ 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)
3F:→ coolcomm:因为nowNode不在stack上 stack上有的只是一个指标而已 02/05 10:02
4F:→ coolcomm:而stack下层还有更多指向nowNode"本体"的指标 02/05 10:04
5F:→ ssccg:用你的说法,是nowNode的reference在stack,但object在heap 02/06 05:00
6F:→ ssccg:nowNode.left是先指到heap上的nowNode,再取出left 02/06 05:02