You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinkedList实现中current与head引用为何不被视为别名?

为什么修改curr的指向不会影响head?

先掰明白Java里引用的本质:引用变量是存储对象地址的容器,多个引用指向同一个对象时,它们是对象的别名,但引用变量本身是独立的。

拆解你的代码逻辑

看这段关键代码:

Node curr = head; // 把head里的对象地址复制给curr
while (curr.next != null) {
    curr = curr.next; // 修改curr的指向,和head无关
}
curr.next = newNode; // 修改curr指向的对象的属性,会影响链表结构

分情况解释核心问题:

  1. 复制引用地址:
    执行Node curr = head时,head里存的是某个Node对象的内存地址,这个地址被复制到了curr变量里。此时curr和head都指向同一个Node对象,但curr和head是两个完全独立的变量——就像你和朋友都拿着写着同一个餐厅地址的纸条,你们俩的纸条是分开的。

  2. 修改引用变量的指向:
    执行curr = curr.next时,你是把curr这个变量里的地址换成了curr.next的地址(也就是下一个Node的地址)。这就相当于你把自己手里的纸条换成了餐厅隔壁咖啡馆的地址,但你朋友手里的纸条还是原来餐厅的地址——head变量里的地址根本没动,自然不会受影响。

  3. 修改引用指向的对象内容:
    最后执行curr.next = newNode时,你是在修改curr当前指向的那个Node对象的next属性。这时候因为这个Node是链表的一部分,head指向的整个链表结构会跟着更新——就像你和朋友都去了那个餐厅,你在餐厅里加了个新包间,你朋友回来也能看到这个新包间。

纠正你的误解点

你混淆了修改引用变量的指向和修改引用指向的对象的内容:

  • 多个引用指向同一个对象时,修改对象的内容会让所有引用都看到变化;
  • 但修改引用变量本身的指向(把它赋值成另一个对象的地址),只会改变这个引用自己的指向,和其他引用无关。

内容的提问来源于stack exchange,提问作者Jiya varma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:03:21