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

Go语言中修改ListNode的Next字段为何影响结构体相等性判断?

为什么修改node2.Next会影响temp与node2的相等性判断?

在Go语言中,结构体的相等性判断是逐字段完全匹配的——只要结构体的任意一个字段值不相等,整个结构体就判定为不相等。

结合你的代码来看具体原因:

  • 初始化阶段,temp := node2是把node2的全部值拷贝给temp,此时两者的Val字段都是100,Next指针也都指向同一个node1的内存地址,所以第一次temp == node2的判断成立,会打印Equalssss1。
  • 当执行node2.Next = &(ListNode{1 , nil})时,你其实修改了node2结构体的Next字段值:这个字段是一个指针,现在它指向了新创建的ListNode实例的地址,而temp的Next字段仍然保留着原来指向node1的地址。
  • 第二次判断时,temp和node2的Next字段值(指针地址)已经不同,因此整个结构体的相等性判断不成立,也就不会打印Equalssss2。

你觉得“修改node2.Next不是修改node2本身”是误解——node2是一个结构体,Next是它的核心字段之一,修改这个字段的值就是修改了node2结构体的整体内容,而temp是之前的完整拷贝,两者的字段状态已经不一致,自然无法通过相等性判断。

内容的提问来源于stack exchange,提问作者Bhargav Vanamala N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:31:14