尝试将对象添加到PriorityQueue时出现NullPointerException

时间:2010-04-27 04:15:17

标签: java nullpointerexception add priority-queue

在尝试将对象添加到优先级队列时,我一直收到空指针异常

我初始化队列:

private PriorityQueue<NodeObject> nodes;

在这里我尝试添加它:

NodeObject childNode = new NodeObject(child, 1);
nodes.add(childNode);

为什么这不起作用?我知道我的NodeObject不是null,因为我在添加它之前创建它。

3 个答案:

答案 0 :(得分:6)

您尚未初始化队列。

nodes = new SomePriorityQueue();

答案 1 :(得分:3)

问题是您忘记初始化优先级队列nodes。将其更改为:

private PriorityQueue<NodeObject> nodes = new PriorityQueue<NodeObject>();

或者在每个构造函数中显式分配nodes(如nodes = new PriorityQueue<NodeObject>();中所示)。请记住,在Java中,任何非原语的类型实际上都是隐式指针,因此当指针nodes已初始化为null时,它尚未初始化为指向某些内容。

答案 2 :(得分:1)

您实际上并未创建优先级队列; nodes == null。当您尝试调用NullPointerException时,这会导致nodes.add被抛出。

解决此问题的方法是实际构建PriorityQueue<NodeObject>,并将其引用分配给nodes。您可以在声明中执行以下操作:

private PriorityQueue<NodeObject> nodes = new PriorityQueue<NodeObject>();
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

JLS 4.12.5 Initial Values of Variables

  
      
  • 每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化:      
        
    • 对于所有参考类型,默认值为null
    •   
  •