参考如何在Java中工作?

时间:2017-04-03 10:41:38

标签: java reference linked-list

我知道对象是按值传递的,而是传递的值。

所以说我上课了:

  //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 指向的是什么?

1 个答案:

答案 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文档,您将获得顺利的学习。快乐学习,欢呼。