Java:返回实际对象与返回引用

时间:2013-09-24 21:39:07

标签: java data-structures

传递值和引用 - 我一直在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节点。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

swap(x, y);
执行交换x后,

仍然具有相同的引用。

但是下面的代码会改变值

public void change(Point a)
    {
      a.x=10; //reference is copied but same, so value will change 
    }
Point x;
change(x);