gpt4 book ai didi

java - Java 中的引用是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 02:35:39 26 4
gpt4 key购买 nike

我知道对象是按值传递的,但传递的是引用的值。

假设我有一个类:

  //Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}

我做了类似的事情:

ListNode n = new ListNode(3);
ListNode n1 = new ListNode(4);
n.next = n1;

现在我有一个链接列表:

n -> n1 -> null

假设现在我做了类似的事情:

/* Previous code from above
ListNode n = new ListNode(3);
ListNode n1 = new ListNode(4);
n.next = n1; */

ListNode ref = n;
n = n.next;

ref现在指向什么?

最佳答案

您的链接列表最初如下

n -> n1 -> null ,如果用类似的值表示 3 -> 4 -> null

当您执行 ListNode ref = n; 时,ref 引用值为 3 的节点。

现在,当您执行 n = n.next; 引用变量 n 时,引用值为 4 的节点。 引用变量 ref不受此分配的影响ref 仍然引用值为 3 的节点。

如果n = n.next完成,而是在执行ListNode ref = n;之后,值被修改为 n.val = 100 那么作为 refn 两者都会引用同一个对象 ref.val == 100 会是true

附注

引用和对象之间存在差异。引用变量指的是对象。当两个引用引用相同的对象时,如果对象状态中的修改*(通常使用.点运算符)是由一个引用完成的,则如果该对象状态被引用的其他引用读取,也会反射(reflect)出相同的情况同一个对象。但是,如果其中一个引用引用另一个对象(使用赋值运算符=),它不会影响其他引用,它仍然引用它所引用的对象。

*注意,状态并不总是通过 String 对象上的 .trim() 等操作来修改,因为 String 类是不可变的。请记住,调试和 java 文档是您最好的帮助工具。当有疑问时,自己尝试一下,调试你编写的代码,引用java文档,你就会有一个顺利的学习。学习愉快,加油。

关于java - Java 中的引用是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182477/

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