对Java中对象引用的工作方式感到困惑
我对对象引用是如何工作的感到困惑,想知道是否有人可以帮忙。下面是一些示例代码,在一般情况下,该代码应基于链表将队列出列:对Java中对象引用的工作方式感到困惑,java,object-reference,Java,Object Reference,我对对象引用是如何工作的感到困惑,想知道是否有人可以帮忙。下面是一些示例代码,在一般情况下,该代码应基于链表将队列出列: Object head = listHead.datum; listHead = listHead.next; return head; 我的理解是,当您有一个基本变量时,存储的实际值被分配给它,但是如果变量是一个对象,那么对对象的引用存储在其中。因此,在上面的代码中,对listHead.datum的引用存储在head中,但随后存储在listHead中的引用被更改为list
Object head = listHead.datum;
listHead = listHead.next;
return head;
我的理解是,当您有一个基本变量时,存储的实际值被分配给它,但是如果变量是一个对象,那么对对象的引用存储在其中。因此,在上面的代码中,对listHead.datum的引用存储在head中,但随后存储在listHead中的引用被更改为listHead.next。当返回名为head的对象时,我会认为它将遵循其指定的引用,即转到listHead(现在指的是另一个位置),然后转到datum
上面的代码应该返回队列的头,但按照我的逻辑,它将返回队列中的第二个。我哪里出错了?当
列表头
发生变化时,头
引用不会动态更新。事实上,没有对象引用具有动态分辨率。必须通过直接赋值显式更改引用。这是实现您认为正在发生的事情的唯一方法:
Object head = listHead.datum;
listHead = listHead.next;
// Only direct assignment can change the object that head points to
head = listHead.datum;
return head;
我们有:
Object head = listHead.datum;
listHead = listHead.next;
return head;
这里有许多参考资料:
是一个参考listHead
是一个参考head
是一个参考listHead.datum
列表头。下一步是参考
- 无论什么
引用(让我们将该实例称为datum
)D
- 无论下一个
引用什么(让我们调用该实例
)N
引用了listHead.datum
D
引用了listHead.next
N
参考了head
D
- 列表头引用了
(注意N
未更改)head
- 您返回的
仍然引用head
D