java指针,这两个循环之间的区别是什么?

java指针,这两个循环之间的区别是什么?,java,list,pointers,syntax,Java,List,Pointers,Syntax,我将数据存储在一个简单的链表结构中, java中这两个循环的区别是什么?我原以为第一个和第二个一样,代码更少,但它不起作用 //1 temp = list.firstElement; while (temp != null) { temp = temp.nextElement; } temp = *data*; //2 if (list.firstElement == null) { list.firstElement = *data*; } else { temp = list.

我将数据存储在一个简单的链表结构中, java中这两个循环的区别是什么?我原以为第一个和第二个一样,代码更少,但它不起作用

//1
temp = list.firstElement;
while (temp != null) {
  temp = temp.nextElement;
}
temp = *data*;

//2
if (list.firstElement == null) {
  list.firstElement = *data*;
}
else {
  temp = list.firstElement;
  while (temp.nextElement != null) {
    temp = temp.nextElement;
  }
  temp.nextElement = *data*;
}

为什么第二个会在列表中添加一些东西,而第一个却没有?第一个元素仍然为null

当temp==null时,您将完全退出第一个循环,也就是说,您已经完全退出了列表


当temp.nextElement==null时,退出第二个循环,这特别意味着temp=无效的这同样意味着temp指向列表中的最后一个元素,您可以成功设置它的nextElement字段。

在第一个循环中,您一直执行到当前元素为空,然后您为该值分配了一些内容,但没有人指向您的新值,因此它不可见

在第二个循环中,直到nextElement为空,然后分配该循环,以便有人指向它。

在第一个代码段中,all temp=data;是否更改temp变量所引用的内容?它不会修改列表中的任何对象

+--+  +--+  +--+  +--+             temp->+--+         
|  |->|  |->|  |->|  |->null             |  |
+--+  +--+  +--+  +--+             data->+--+
在第二个代码段中,当temp在列表中时,temp.nextElement=data;将数据分配给列表中实际存在的内容,从而修改列表

             temp---+
                    V 
+--+  +--+  +--+  +--+             
|  |->|  |->|  |->|  |-------->+--+   
+--+  +--+  +--+  +--+         |  |
                         data->+--+