这个NullPointerException来自哪里?

时间:2014-06-28 11:34:41

标签: java nullpointerexception dijkstra

for(Node<T> neighbor : current.getAdjacentNodes()) {
    neighbor.setDistance(current.getDistance() + neighbor.getDistance());

    queue.add(neighbor);
}

我从这个for循环得到一个NullPointerException。我真的不知道如何避免这种情况。 我已经尝试过询问(如果neighbor == null){break},但这也不起作用。

这是我的班级。 http://pastebin.com/hKMrG6h2

java.lang.NullPointerException
at src.Node.getDistance(Node.java:69)
at src.Dijkstra.populateDijkstraFrom(Dijkstra.java:35)
at DijkstraTest.TestCase1(DijkstraTest.java:34)

Dijkstra.java:35是我的for-loop

[原始代码] http://pastebin.com/k7Mu18YE
[CLASS CODE] http://pastebin.com/hKMrG6h2

1 个答案:

答案 0 :(得分:1)

距离字段具有整数类型。但该字段的getter返回原始int。当您调用getter并且字段未初始化或具有null值时,它将抛出NPE。那是因为JRE尝试将Unbox Integer类型转换为原始int。而且你不能将null赋给int。

我附上了重现该行为的短代码。

    public class Testy {

    static Integer v;

    public static void main(String[] args) {
        getDistance();
    }

    private static int getDistance()
    {
        return v;
    }
}