传递值和引用 - 我一直在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节点。
这是怎么做到的?这完成了吗?
答案 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);