在 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)
正在为堆栈获取 current
的 copy。
您正在更改变量 "current" 引用的内容,但堆栈中的对象不会更改,因为您的变量现在引用了不同的对象。
/*
看错问题忽略这个...
如果您询问您对对象所做的更改 'current' 是否也将具有与当前对象推送到堆栈相同的效果。简短的回答是肯定的。
您推的是对象,而不是克隆体。该对象永远不会更改或被克隆,将某些内容放入 Stack 只是另一种方式,包括您的变量声明以引用内存中的对象。
HashMap、ArrayList等同理。
*/
换个角度来看:
在 C/C++ 你有指针。 java 中的所有变量都应该像那些指针一样受到威胁。当您调用方法时,实际上您将新指针传递给给定对象,而不是对其的引用。
使用 =
你只是用指向新对象的指针覆盖指针的值,旧对象仍然存在,直到垃圾收集器收集它。
stack.push(current);
current = current.left;
Java 是按值传递。您将引用的值传递给对象。更改引用不会影响在 stack
.
中复制的引用值
当我在解决方案中遇到以下几行时,我正在执行顺序遍历:
stack.push(current);
current = current.left;
现在我的问题是,当我将电流压入堆栈并生成 current = current.left;
时,stack
中的节点是否也会更改为 current.left
?在我的例子中,stack
中的电流仍然指向原始的 current
,但 current
变量确实指向 current.left
。这是为什么?
猜测 - 因为 stack.push(current)
正在为堆栈获取 current
的 copy。
您正在更改变量 "current" 引用的内容,但堆栈中的对象不会更改,因为您的变量现在引用了不同的对象。
/* 看错问题忽略这个...
如果您询问您对对象所做的更改 'current' 是否也将具有与当前对象推送到堆栈相同的效果。简短的回答是肯定的。
您推的是对象,而不是克隆体。该对象永远不会更改或被克隆,将某些内容放入 Stack 只是另一种方式,包括您的变量声明以引用内存中的对象。
HashMap、ArrayList等同理。 */
换个角度来看:
在 C/C++ 你有指针。 java 中的所有变量都应该像那些指针一样受到威胁。当您调用方法时,实际上您将新指针传递给给定对象,而不是对其的引用。
使用 =
你只是用指向新对象的指针覆盖指针的值,旧对象仍然存在,直到垃圾收集器收集它。
stack.push(current);
current = current.left;
Java 是按值传递。您将引用的值传递给对象。更改引用不会影响在 stack
.