我知道对象是按值传递的,而是传递的值。
所以说我上课了:
//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 指向的是什么?
答案 0 :(得分:2)
您的关联列表最初如下
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
,然后修改为ref
和{{1}两者都会引用同一个对象n
本来就是ref.val == 100
。
P.S。
引用和对象之间存在差异。引用变量是指对象。当两个引用引用相同的对象时,如果对象状态中的修改*(通常使用true
点运算符)由一个引用完成,则如果对象状态由引用相同对象的其他引用读取,则将反映相同的对象。但是,如果其中一个引用是引用另一个对象(使用赋值运算符.
),它不会影响其他引用,它仍然引用它所引用的对象。
*注意并不总是通过String对象上的=
操作修改状态,因为String类是不可变的。请记住调试和java文档是您最好的帮助工具。如果有任何疑问,请亲自尝试,调试您编写的代码,参考java文档,您将获得顺利的学习。快乐学习,欢呼。