在 Java 中引用 类

Reference to Classes in Java

当我在解决方案中遇到以下几行时,我正在执行顺序遍历:

stack.push(current);
current = current.left;

现在我的问题是,当我将电流压入堆栈并生成 current = current.left; 时,stack 中的节点是否也会更改为 current.left?在我的例子中,stack 中的电流仍然指向原始的 current,但 current 变量确实指向 current.left。这是为什么?

猜测 - 因为 stack.push(current) 正在为堆栈获取 currentcopy

您正在更改变量 "current" 引用的内容,但堆栈中的对象不会更改,因为您的变量现在引用了不同的对象。

/* 看错问题忽略这个...

如果您询问您对对象所做的更改 'current' 是否也将具有与当前对象推送到堆栈相同的效果。简短的回答是肯定的。

您推的是对象,而不是克隆体。该对象永远不会更改或被克隆,将某些内容放入 Stack 只是另一种方式,包括您的变量声明以引用内存中的对象。

HashMap、ArrayList等同理。 */

换个角度来看: 在 C/C++ 你有指针。 java 中的所有变量都应该像那些指针一样受到威胁。当您调用方法时,实际上您将新指针传递给给定对象,而不是对其的引用。 使用 = 你只是用指向新对象的指针覆盖指针的值,旧对象仍然存在,直到垃圾收集器收集它。

stack.push(current);

current = current.left;

Java 是按值传递。您将引用的值传递给对象。更改引用不会影响在 stack.

中复制的引用值