对于对象引用如何在Java中工作感到困惑

时间:2012-12-10 16:36:43

标签: java object-reference

我很困惑对象引用如何工作,并想知道是否有人可以提供帮助。下面是一些示例代码,它应该基于一般情况的链表来对队列进行deQueue:

Object head = listHead.datum;
listHead = listHead.next;
return head;

我的理解是,当你有一个原始变量时,存储的实际值被分配给它,但是如果变量是一个对象,那么对象的引用就存储在那里。所以在上面的代码中,对listHead.datum的引用存储在head中,但是listHead中存储的引用被更改为listHead.next。当返回名为head的Object时,我会认为它将遵循它的指定引用,即转到listHead(现在引用另一个地方),然后转到datum。

上面的代码应该返回队列的头部,但是按照我的逻辑,它将返回队列中的第二个。我哪里错了?

2 个答案:

答案 0 :(得分:4)

head引用未随listHead更改而动态更新。实际上,没有对象引用具有动态分辨率。必须通过直接分配明确更改引用。这是实现您的想法的唯一途径:

Object head = listHead.datum;
listHead = listHead.next;
// Only direct assignment can change the object that head points to
head = listHead.datum;
return head;

答案 1 :(得分:4)

我们有:

Object head = listHead.datum;
listHead = listHead.next;
return head;

这里有很多参考资料:

  • listHead是参考
  • head是参考
  • listHead.datum是参考
  • listHead.next是参考

引用了两个实际的对象实例:

  • 无论datum引用(让我们称之为实例D
  • 无论next引用(让我们称之为实例N

以下是事情发生的原因。

  • listHead.datum引用了D
  • listHead.next引用了N
  • head会引用D
  • listHead会引用N(请注意head未更改)
  • 您返回的head仍然引用D