3

我对对象引用的工作方式感到困惑,想知道是否有人可以提供帮助。下面是一些示例代码,它应该根据一般情况的链表对队列进行排队:

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

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

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

4

2 回答 2

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;
于 2012-12-10T16:44:10.463 回答
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
于 2012-12-10T16:49:32.660 回答