簡體   English   中英

對於對象引用如何在Java中工作感到困惑

[英]Confused about how object references work in Java

我很困惑對象引用如何工作,並想知道是否有人可以提供幫助。 下面是一些示例代碼,它應該基於一般情況的鏈表來deQueue隊列:

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

我的理解是,當你有一個原始變量時,存儲的實際值被賦給它,但如果變量是一個對象,那么對象的引用就存儲在那里。 所以在上面的代碼中,對listHead.datum的引用存儲在head中,但是listHead中存儲的引用被更改為listHead.next。 當返回名為head的Object時,我會認為它將遵循它的指定引用,即轉到listHead(現在指的是不同的地方),然后轉到datum。

上面的代碼應該返回隊列的頭部,但是按照我的邏輯,它將返回隊列中的第二個。 我哪里錯了?

listHead更改時, head引用不會動態更新。 實際上,沒有對象引用具有動態分辨率。 必須通過直接分配明確更改引用。 這是實現您的想法的唯一途徑:

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是一個引用
  • listHead.next是一個參考

有兩個實際的對象實例被引用:

  • 無論datum引用(讓我們稱之為實例D
  • 無論next引用(讓我們稱之為實例N

事情就是這樣。

  • listHead.datum有對D的引用
  • listHead.next引用了N
  • head是指D
  • listHead被賦予對N的引用(注意head沒有改變)
  • 返回head仍然引用D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM