gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:04:46 25 4
gpt4 key购买 nike

按值传递和按引用传递 - 我在 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。

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

这是如何完成的?这到底完成了吗?

最佳答案

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);

关于Java:返回实际对象与返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18992522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com