关于引用传递的问题

来源:5-2 测试自己的Leetcode链表代码

残天一月

2019-03-28

图片描述
老师您好,在看链表的时候我就比较纠结一个问题,像这里这个ListNode cur = this应该是引用传递吧?
这样才能解释for循环中第一句为cur.next赋值之后,this.next也能等于新生成的node,那为什么在cur = cur.next之后,cur的值和地址都改变了,而this的内容却没有随着改变呢?老师能不能抽空帮我解答一下,不胜感激

写回答

2回答

liuyubobobo

2019-03-29

@慕九州3166796 的解释完全正确。所谓的引用本质是存储一个指针指向真正的内存空间。或者你可以理解成所谓的引用只是存储了一个内存地址。我们通过这个内存地址到真正的内存去寻找真正的内容。而一个内存地址本质就是一个整数。

ListNode cur = this;  // cur和this的引用相同
                      // 就是说cur和this现在存储的是同一个地址指向同一个内存空间
cur = cur.next; // cur的引用变成了cur.next,
                // 就是说cur和现在存储了一个新的地址但是this所存储的地址是不改变的


由于内存地址本质就是整数所以和下面的例子是一样的

int t = 3;
int cur = t; 
cur = 100; // cur发生了改变但t不会变


继续加油

1
1
残天一月
懂了,对比说明,我发现我之前应该是把cur=this这一步当成引用传递了,谢谢老师
2019-03-30
共1条回复

慕九州3166796

2019-03-28

ListNode cur = this;//cur和this的引用相同

cur = cur.next;//cur的引用变成了cur.next,但是this的引用并没有变化

1
1
liuyubobobo
大赞!感谢分享:)
2019-03-29
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程