use*_*279 1 c java linked-list nodes
前一段时间我在C中实现了一个LinkedList.由于每个Node都是一个值,另一个指向列表中下一个元素的指针,因此非常简单.但是现在我正在尝试在Java中实现LinkedList,因为没有指针我创建了这样的Node:
public class MyNode{
int value;
MyNode next;
public MyNode(int i){
value = i;
next = null;
}
}
Run Code Online (Sandbox Code Playgroud)
现在让我说我有这个:
MyNode n1 = new MyNode(1);
MyNode n2 = new MyNode(2);
n1.next = n2;
MyNode n3 = new MyNode(3);
n2 = n3;
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我会得到什么
System.println(n1.next.value);
Run Code Online (Sandbox Code Playgroud)
我会得到2或3吗?我来自C的主要问题是我并不真正理解java如何围绕数据移动.它将n2复制到n1还是n1只指向n2?这一切都让人感到困惑.
尝试用指针进行类比(我们称它们为Java中的引用):
您可以将变量(n1,n2,n1.next等)视为指向内存中某些对象的指针.因此,new Node(2);创建一个Node并将其放在内存中,n2 = ...并使变量n2指向该节点的"地址".
然后n1.next = n2;,当您写入时,n1.next通过将该地址的值复制到该地址来指向相同的"地址" n1.next.
当您稍后编写时n2 = n3;,您将n2变量指向不同的"地址",但n1.next仍指向初始new Node(2)对象的地址.
底线:System.out.println(n1.next.value);打印2,而不是3.
相关帖子:Java是"传递引用"还是"按值传递"?