在java中的以下代码中导致空指针异常的原因是什么?

时间:2012-11-01 03:25:24

标签: java exception

当我运行以下代码时,我得到Null Pointer Exception。我无法弄清楚为什么会这样。

public class LinkedList<T> {
private Link head = null;
private int length = 0;

public T get(int index) {
    return find(index).item;
}

public void set(int index, T item) {
    find(index).item = item;
}

public int length() {
    return length;
}

public void add(T item) {
    Link<T> ptr = head;
    if (ptr == null) {
        // empty list so append to head
        head = new Link<T>(item);
    } else {
        // non-empty list, so locate last link
        while (ptr.next != null) {
            ptr = ptr.next;
        }
        ptr.next = new Link<T>(item);
    }
    length++; // update length cache
}

// traverse list looking for link at index
private Link<T> find(int index) {
    Link<T> ptr = head;
    int i = 0;
    while (i++ != index) {
        if(ptr!=null) {
            ptr = ptr.next;
        }
    }
    return ptr;
}

private static class Link<S> {
    public S item;
    public Link<S> next;

    public Link(S item) {
        this.item = item;
    }
}

public static void main(String[] args) {
    new LinkedList<String>().get(1);
}
}

2 个答案:

答案 0 :(得分:2)

new LinkedList<String>().get(1)

返回

find(1).item

find(1)返回head。但是head为空,所以你要返回

null.item

这是一个空指针异常。您应该在find(index)中检查get是否为空。

答案 1 :(得分:0)

您永远不会在ptr中验证null不是find()