为什么如果我将List实例化为null则失败

时间:2017-08-07 16:31:44

标签: java list nullpointerexception

我必须使用对象列表而不是对象,如果我使用

,则太多次了
MyObj a = null;
a.setParameter = 0;

有效。 但是,如果我使用

List<MyObj> a = null;
MyObj b = getObjectFromSomewhere();
a.add(b);

失败并出现错误:java.lang.NullPointerException?

我怎么看?如果我的新List<MyObj> a是“null”或者里面没有任何元素?

3 个答案:

答案 0 :(得分:6)

列表是容器,您必须将元素放入其中。在放入任何内容之前必须存在该列表(因此您可以使用列表,注意)。

所以这个:

List<MyObj> a = null;

声明一个指向null的变量 - 而不是实际的容器。尝试:

List<MyObj> a = new ArrayList<>();

(请注意,列表有不同的种类,具有不同的性能特征,以上只是选择用于说明的常用品种)

(为了解决你的第一点re a.setParameter,我想这是一个静态方法 - 为类定义,而不是类的实例 - 而且令人困惑的是Java会让你通过实例引用它

答案 1 :(得分:0)

Eclipse允许您将其启动为null,因为Eclipse认为您将在稍后的代码中将对象指向此引用。

所以你有责任在使用任何List方法之前让它引用一个对象。

答案 2 :(得分:-1)

执行此操作List<MyObj> a = null不会在内存中进行初始化,因此a指向任何内容

你应该做的是

List<MyObj> a = new ArrayList<>();
a.add(getObjectFromSomewhere());
  

我怎么看?如果我的新列表a是“null”或没有任何元素   内?

if(a == null){...} // to check if array not initialized 
if(a.size() == 0){...} // to check if array have no element

请注意,当a.size() a nullNullPointerException

时,请致电[...buffer].map(b => b.toString(16))