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

Liz*_*uge 0 java list nullpointerexception

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

MyObj a = null;
a.setParameter = 0;
Run Code Online (Sandbox Code Playgroud)

有用.但如果我使用

List<MyObj> a = null;
MyObj b = getObjectFromSomewhere();
a.add(b);
Run Code Online (Sandbox Code Playgroud)

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

我怎么看?如果我的新List<MyObj> a单词是"null"或内部没有任何元素?

Bri*_*new 6

列表是您必须将元素放入的容器.列表必须在放入任何内容之前存在(因此您可以有一个列表,请注意).

所以这:

List<MyObj> a = null;
Run Code Online (Sandbox Code Playgroud)

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

List<MyObj> a = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

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

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

  • *任何*对象引用可以是null,注意,列表只是一个对象.但我同意空列表令人困惑,并且通常更喜欢空列表,这样我就不必在迭代之前检查它. (2认同)