head = head.getNext()和head = current.getNext()之间有什么区别?

时间:2014-02-24 02:01:03

标签: java generics setter getter singly-linked-list

我想实现一个LinkedList删除方法,删除任何特定位置的项目,但我最感兴趣的是在这种情况下删除列表开头(第零个位置)的项目。

我的代码适用于n大于零的值,所以我在n == 0时编写了一个if语句,但是直到我搜索到答案才能理解为什么它不起作用,这对我看起来类似于我写。

public class LinkedList<E> extends Node<E>{
public LinkedList(){}
public Node<E> head;
//removes node at n and returns contents of removed node; 
public E remove(int n){
    Node<E> current = head; T info;
    if(n==0){info=current.getInfo();
        head=current.getNext();return info;}
    }
}

我的初始陈述是head=head.getNext(),而不是head=current.getNext()因此我的问题。这两者有什么区别?

他们是等同的,但执行方式不同? 感谢

2 个答案:

答案 0 :(得分:2)

如果将head的值分配给current(就像在这里一样),它们应该是等效的。因为它们是对象而不是基元,所以将它们分配给另一个使它们都引用同一个对象。因此,调用head.getNext()current.getNext()都应该返回对同一对象的引用。

答案 1 :(得分:0)

headthis.head的简写)是object属性,而current是一个局部变量,只在声明的代码块中可见。

只是重新检索这个值,没有区别,所以如果你真的改变了,那么两个版本都应该有用。

然而,Modifygin是不同的。更改current时,更改不会反映在块之外,如果功能完成,则current将被删除。但是,如果更改this.head,则更改了对象属性y中存储的引用,并且该更改将在函数结束后保留​​。