Java:如何更改局部变量引用的对象?

时间:2018-01-28 17:00:30

标签: java memory local-variables

我有一个递归搜索树的函数,寻找一个特定的条件来保存。如果它确实成立,那么树中的那个节点应该被一种新的节点替换。在下面的示例代码中,我调用了类Tree_Node,因为它的行为与TreeNode非常相似,但并不完全相同。我仍然希望这个基本想法是熟悉而清晰的。

public void func(Tree_Node tn) { 
    if (!tn.isLeaf()) {
        if (tn.condition()) {
            tn = new Tree_Node(x);
        } else {
           func(tn.getChild(name));
        }
    }
}

现在我发现tn = new Tree_Node(x)没有改变树中节点的值,我相信这是因为命令只是改变了局部变量{{1}的值而我想改变存储在它“指向”的位置的对象。在树中,我想用不同的节点替换此节点。

当我头脑风暴解决方案时,我提出了两个似乎理论上可行的选项:不知何故有父节点的内存,也许是通过将它作为参数传递给函数,然后我可以改变孩子的这个父母。我也可以为tn定义.parent()方法,然后在Tree_Node上调用该方法。

想到的第二个选项是以某种方式在存储器中找到存储该节点的地址,并更新该地址的内容。出于各种原因,如果有可能而且不太困难,我会强烈地愿意这样做。我也花了一些时间谷歌搜索“java内存地址”,看看答案是否已经存在,但a)看不到有用的信息,和b)看到一些帖子暗示做这种事情是不安全的。

欢迎任何解决方案或建议。

0 个答案:

没有答案