gpt4 book ai didi

java - 如何在函数中创建引用而不更改函数参数的值?

转载 作者:行者123 更新时间:2023-12-02 07:23:50 25 4
gpt4 key购买 nike

我是java新手。问题可能不是那么清楚。让我用代码来解释一下。下面的代码是一个打印链表中的值的函数。该函数的第一行创建一个引用,该引用指向 HeadNode 引用所指向的同一对象。因此对 currentNode 的任何更改都会影响 HeadNode 所指向的对象。现在,在 while 循环内,我正在更改 currentNode,但我观察到退出函数后 linkedList 没有更改。为什么?

static void PrintLinkedList(ListNode HeadNode)
{
ListNode currentNode = HeadNode;
while(currentNode != null)
{
System.out.println(currentNode.getData());
currentNode = currentNode.getNext();
}
}

更新:

我提出这个问题的原因是,当我实现一个反转链表的函数时,执行以下代码后我的 tempNode 变为 null:

static ListNode ReverseLinkedList(ListNode headNode)
{
ListNode headNodeTemp = headNode;
headNodeTemp.setNext(null);
ListNode tempNode = headNode.getNext(); //temp becomes null because headNode is changed. Why??
ListNode currentNode = headNodeTemp;
while(tempNode != null)
{...

最佳答案

So any changes to currentNode will affect the object that HeadNode is pointing to.

不,currentNode 是对 HeadNode 也引用的对象的引用。您永远不会更改该对象,您更改的只是 currentNode 所引用的内容。

currentNode = currentNode.getNext();

使currentNode指向下一个对象,它不会改变任何对象。

要改变对象,需要调用方法或者设置属性,

currentNode.mutate();
currentNode.property = 17;

会改变所指向的对象,并且当通过HeadNode查询该对象时,这些更改将可见。

currentNode = currentNode.getNext();

只是让currentNode指向另一个对象。

static ListNode ReverseLinkedList(ListNode headNode)
{
ListNode headNodeTemp = headNode;
headNodeTemp.setNext(null);

这里,我们调用一个方法来改变所指向的对象。从名称来看,它将 next 字段设置为 null。而headNodeTemp指向的对象就是headNode指向的对象。

    ListNode tempNode = headNode.getNext(); //temp becomes null because headNode is changed. Why??
ListNode currentNode = headNodeTemp;
while(tempNode != null)
{...

你应该移动

ListNode tempNode = headNode.getNext();

setNext(null) 行上方的行。

static ListNode ReverseLinkedList(ListNode headNode)
{
ListNode headNodeTemp = headNode;
ListNode tempNode = headNode.getNext();
headNodeTemp.setNext(null);
ListNode currentNode = headNodeTemp;
while(tempNode != null)
{...

关于java - 如何在函数中创建引用而不更改函数参数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com