gpt4 book ai didi

java - Java中 'pass by reference'/'pass by value'变量赋值的规则是什么?

转载 作者:行者123 更新时间:2023-12-01 17:15:40 24 4
gpt4 key购买 nike

因此,关于按引用传递/按值传递,方法如何处理参数传递已有详细记录,但是变量赋值又如何呢?

例如,我刚刚编写了一些如下所示的代码:

TreeNode<T> parent = null;
TreeNode<T> current = m_root;
while(current != null) {
parent = current;
current = current.getRight();
}

现在,我如何知道在 while 循环中最后一次赋值之后 parent 不等于 current.getRight() ?规则是什么?

最佳答案

What is the rule in Java for 'pass by reference' / 'pass by value' for variable assignment?

与将内容传递到方法中相同:被复制,没有对变量的引用。

Now, how do I know that parent is not equal to current.getRight() after the last assignment in the while loop? What is the rule?

你不知道,它们可能都是null。但如果其中一个 null,您就知道它们不相等,因为循环会一直持续到 currentnull 因此,如果 parentnull,它们就不能相等。

但要注意这里的困惑。 parentcurrent 可以保存的值是对象引用。 (这句话中的“引用”与“通过引用传递”中的“引用”没有任何关系。只是使用了“引用”一词对于不同上下文中的许多不同事物。)因此,通过在两个变量中具有相同的值(相同的对象引用),这两个变量可以引用同一个对象。

这对于变量和方法参数来说是完全相同的。让我们用一个更简单的例子:

Foo a = new Foo();
Foo b = a;

内存中有一个 Foo 对象,并且 ab 变量都包含相同的值,这是对该对象的引用目的。但这两个变量之间没有联系。例如,如果我们添加以下内容:

b = new Foo();

...现在内存中有两个 Foo 对象,a 引用(指向)其中一个,b指的是对方。这样做对 a 中的值没有任何影响。 (如果 abint 的话,情况就是这样。)

关于java - Java中 'pass by reference'/'pass by value'变量赋值的规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280870/

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