对象和变量更新的一点混淆

时间:2014-01-02 08:15:27

标签: java variables object

非常快的问题。 我正在研究三叉树的删除方法。我的方法很简单,我通过用node.left对象替换节点对象来删除和连接。

 public void delete(int key, Node node) {
    if (node == null) {
      throw new RuntimeException();
    } else if (key < node.key) {
       delete(key, node.left) ;
    } else if (key > node.key) {
       delete(key, node.right);
    } else { 
      //found the node to delete, delete from here.
      if (node.mid != null) {
          node = node.mid;
      }
      else if (node.left == null) {
          node = node.right;
      }    
      else if (node.right == null) {
          node = node.left;
        //node.key=node.left.key;
      }
      else {
        node= findMin(node.right);
      } 
    }

  }  

这是代码的一部分。但是,它不起作用,也就是说,它的关键node.key仍然是相同的。

else if (node.right == null){
          node = node.left; 
      }

但是如果我明确地写了node.key,那么它就可以了。

 else if (node.right == null){
          node.key=node.left.key;
      }

为什么? 我永远无法理解对象和引用的东西,geez ...谢谢你们。

2 个答案:

答案 0 :(得分:0)

这是因为在第一种情况下,您根本不会更改应该跟踪下一个要寻址的节点的密钥

答案 1 :(得分:0)

问题并不完全清楚,但我认为你必须看到java规范:java通过副本传递值。因此,如果指定的代码是方法而节点是函数的参数,则传递的对象将不会更改,引用的对象(在您的情况下为“key”)是。

请参阅Is Java "pass-by-reference" or "pass-by-value"?

我希望它有所帮助。