透过链表来看java中支持值传递还是引用传递

张开发
2026/4/18 23:57:14 15 分钟阅读

分享文章

透过链表来看java中支持值传递还是引用传递
首先回答java中只支持值传递没有引用传递。在学习链表时可以发现给出一个有四个节点不含头节点的链表要求交换第二三个节点的位置。1 ListNode p head; 2 p p.next.next; 3 head.next.next p.next; 4 p.next head.next; 5 head.next p;第1、2行创建了第三个节点的引用第3行使第二个节点存的引用变成了第四个节点的地址第4行使第三个节点存的引用变成了第二个节点的地址第5行使第一个节点存的引用变成了第三个节点的地址如果此时发生的是引用传递那么从第二行开始就会出错。p此时指向首元节点把p.next.next赋值给了pp指向了第三个节点因为发生的是引用传递head也跟着指向了第三个节点。这很明显是错误的。head并不会因为p的改变而改变。但是再看到第3行head.next.next的这次赋值又确实使第二个节点存的引用发生了改变使第二个节点指向了第四个节点。为什么同样是赋值一个是一改全改一个却是各自独立这是因为引用数据类型中存的值只是每个变量名所拥有的而例子中的next是对象拥有的只要引用一样调用出都是同一个对象的next值而不是这个引用数据类型自己的值。所以对象里的值一改全改所有人访问到的都是一样的但是其他的值是变量自己拥有的即使A给B赋值B的修改也不会影响到A的值。总结java中只有值传递看起来像引用传递的是因为引用数据类型访问到了对象里的值才会出现A改B也改的这种情况。

更多文章