1
我在嘗試理解基本節點列表的代碼時遇到問題。節點(類ListNode)包含三個變量;一個字符串「鍵」,一個值「值」,然後另一個節點「下一個」。到現在爲止還挺好。然而,與貼切的名稱列表地圖類,我們有,我有一個很難作出的意義上的put()方法:瞭解節點列表
public void put(String key, int value) {
ListNode l = search(key, head);
if (l==null) {
head = new ListNode(key, value, head);
} else {
l.value = value;
}
protected static ListNode search(String key, ListNode l) {
if (l==null) {
return null;
} else if (key.equals(l.key)) {
return l;
} else {
return search(key, l.next);
}
}
字符串「鍵」的方法搜索,如果有一個在列表中,它用作爲第二個參數給出的新值替換它的值。
我無法得到我的頭是這個變量l,它被分配與第一個參數共享相同的「密鑰」或字符串的節點。
當l.value設置爲值時,爲什麼這會影響列表?
不是變量l只是列表中的一個節點的副本,而不是實際的節點?
對於這樣一個令人困惑的問題,我提前表示歉意,但我希望你們其中一個能夠理解它。
感謝您抽出寶貴的時間。 我明白了,這樣的情況總是如此嗎? 什麼時候它是一個參考,什麼時候是一個副本,如果它是一個副本? – Alex
@ user1772056:除非您明確地調用對象上的clone(),否則它絕不是副本。這在正常的Java開發中非常罕見。 –
http://javadude.com/articles/passbyvalue.htm – Mik378