0

按值和引用传递 - 我一直在 C++ 中这样做。但我想知道java的行为。

我正在写一个 BST 并变出以下方法:

private Node<T> get_node(T data)
{
    Node<T> tmp = null;
    if (isEmpty())
    {
        return null;
    }
    tmp = root;
    while (tmp != null)
    {
        //System.out.println("tmp is " + tmp.getData());
        if (compare(tmp.getData(), data) < 0) //data is greater
        {
            System.out.println("get right");
            tmp = tmp.getRight();
        }
        else if (compare(tmp.getData(), data) < 0) //tmp is greater
        {
            System.out.println("get left");
            tmp = tmp.getLeft();
        }
        else if (compare(tmp.getData(), data) == 0) //we found it
        {
            System.out.println("get left");
            return tmp;
        }
    }
    return null;
} 

这是在 BST 类本身中 - 我正在使用这个辅助函数在“this”中构造一个新的 BST。

问题是,我不认为这个方法实际上是在返回 ACTUAL 节点。我认为它正在返回一个副本或对我同样无用的东西。我真的希望这能在其中返回 ACTUAL 节点。

这是怎么做到的?这完全完成了吗?

4

1 回答 1

1

Java 不通过引用传递,它总是按值传递。

对于对象,对象引用也作为副本传递,因此如果您有引用的副本,您将能够操作值,但不要将其与按引用传递混淆。

public void swap(Point a, Point b)
{
  Point temp = a;
  a = b;
  b = temp;
}
Point x;
Point y;

swap(x, y);

执行交换后 x 和 y 仍然具有相同的引用。

但是下面的代码会改变值

public void change(Point a)
    {
      a.x=10; //reference is copied but same, so value will change 
    }
Point x;
change(x);
于 2013-09-24T23:20:29.707 回答