Java中LinkedList处使用泛型的Null指针异常
在“添加方法”中,您可以执行以下操作:Java中LinkedList处使用泛型的Null指针异常,java,Java,在“添加方法”中,您可以执行以下操作: public class Point { double x; double y; public Point(double x,double y) { this.x=x; this.y=y; } public String toString() { return "("+Double.toString(x) + " , " + Double.toString(y) +
public class Point {
double x;
double y;
public Point(double x,double y) {
this.x=x;
this.y=y;
}
public String toString() {
return "("+Double.toString(x) + " , " + Double.toString(y) + ")";
}
}
但最后一个从未初始化。它总是空的,所以第一个总是空的
调用get方法时,您需要执行以下操作:
if (first==null) first=last;
由于第一个值为null,因此会得到NullPointerException
查看代码的这一部分:
first=first.next;
最后一个未设置。它将始终为空。所以first总是空的。当你打电话到这里:
public void add(E element) {
Entry<E> e = new Entry(element, null);
if (last != null) { last.next = e; }
last = e;
if (first == null) first = last;
}
您正试图从空对象获取下一个值。您的变量最后一个和第一个从未初始化:
public E get() {
Entry<E> temp=first;
first=first.next;
return temp.data;
}
请添加异常堆栈跟踪,并在代码中标记获取异常的行。请在问题中添加更多文本。对于您的问题,几乎没有什么解释。您错过了Entry First的实例化,以及为什么如果我们在add方法中指定last,它会工作,但当我们将它传递给Entry时,它会变为null?还是我缺少smt?这是因为在Java中,变量是引用,但不是通过引用传递方法参数,而是通过值传递。因此,当您修改为时,您将更改由“到”引用的对象,但最后一个对象不变。在这个答案中,您可以找到一个很好的解释:但是to指的是与last相同的对象。在add method Entry e=new Entryelement中,last传递对last指向的对象的引用,并将其接受???最初,last和to引用同一个对象,但它们是不同的变量。当您这样做时,它们不再引用相同的对象。您没有修改引用的对象。您正在将变量的值修改为,以便它引用另一个对象。变量last保持不变。
public Entry(E element,Entry<E> to) {
data=element;
next=to;
to=this;
}
public void add(E element) {
Entry<E> e = new Entry(element, null);
if (last != null) { last.next = e; }
last = e;
if (first == null) first = last;
}
public E get() {
Entry<E> temp=first;
first=first.next;
return temp.data;
}
Entry<E> first;
Entry<E> last;
first=first.next;