Java中LinkedList中的指针

Java中LinkedList中的指针,java,linked-list,Java,Linked List,我正在研究链表,在理解Java中的引用和指针时遇到了一点问题(还有一些问题我在互联网上找不到答案)。也就是说,我有一个类LinkedList,它使用类节点,如下所示: public class LinkedList { public Node head; public LinkedList(int data) { head = new Node(data); } } 这是我的节点类: public class Node { public int

我正在研究链表,在理解Java中的引用和指针时遇到了一点问题(还有一些问题我在互联网上找不到答案)。也就是说,我有一个类
LinkedList
,它使用类
节点
,如下所示:

public class LinkedList {
    public Node head;
    public LinkedList(int data) {
        head = new Node(data);
    }
}
这是我的节点类:

public class Node {
    public int data;
    public Node next;
    public Node(int data2) {
        data = data2;
    }
}
我在
LinkedList
中还有方法
toStringLL()
,它看起来像:

public void toStringLL() {
    LinkedList l=this;
    while(l.head.next != null) {
        System.out.print(l.head.data+"->");
        l.head = l.head.next;
    }
    System.out.print(l.head.data);
    System.out.println("");
}
当我用
l.head=l.head.next
遍历链表时,我不明白为什么这个
toStringLL()
会改变我的链表头?我的头不应该保持不变吗?我想当我写
LinkedList l=this
时,我可以自由地迭代
l
,而不会影响
this
(或者我错了吗?),但我很难弄明白为什么这是有效的,而前一个是无效的。。有人能给我解释一下这两者的区别吗

l.head=l.head.next;
你改变了你的头。

当你设定

l.head=l.head.next;
你改变主意

我不明白当我用l.head=l.head迭代链表时,为什么这个toString()会改变我的链表头。下一步?我的头不应该保持不变吗

当你做作业的时候

LinkedList l = this;
您没有创建新的
LinkedList
对象。您只是在定义对现有
LinkedList
对象的引用

因此,
l.head=l.head.next
的作用与
this.head=this.head.next
完全相同。两者都会改变您原来的列表

另一方面,当你写作时

Node n = this.head
您没有更改列表的标题。您正在声明一个变量,该变量最初引用列表的
head
,但当您将该变量更改为引用列表的其他节点时,列表的
head
变量(
this.head
)保持不变

我不明白当我用l.head=l.head迭代链表时,为什么这个toString()会改变我的链表头。下一步?我的头不应该保持不变吗

当你做作业的时候

LinkedList l = this;
您没有创建新的
LinkedList
对象。您只是在定义对现有
LinkedList
对象的引用

因此,
l.head=l.head.next
的作用与
this.head=this.head.next
完全相同。两者都会改变您原来的列表

另一方面,当你写作时

Node n = this.head

您没有更改列表的标题。您正在声明一个变量,该变量最初引用列表的
head
,但当您将该变量更改为引用列表的其他节点时,列表的
head
变量(
this.head
)保持不变。

Java没有指针。如果您更改
LinkedList l=this
您不是在复制列表,而是在创建另一个变量,该变量引用相同的
LinkedList
对象。Java中的变量(非基本类型)是引用,而不是对象本身。请在代码中提供节点n=this。headJava没有指针。当您这样做时,
LinkedList l=this
您不是在复制列表,而是在创建另一个变量,该变量引用相同的
LinkedList
对象。Java中的变量(非原语类型)是引用,而不是对象本身。请使用Node n=this.head提供代码。您是否清楚OP如何使用Node n=this.head在列表中进行迭代?我的意思是他说这很有效。但区别取决于他如何进一步使用它。@Russiancold我假设OP使用
n=n
在使用Node n=this.head时迭代节点您是否清楚OP如何使用Node n=this.head迭代列表?我的意思是他说这很有效。但区别取决于他如何进一步使用它。@Russiancold我假设OP使用
n=n
使用
节点n=this.head时迭代节点