繁体   English   中英

为什么这会引发Null Pointer Exception?

[英]Why does this throw Null Pointer Exception?

我的代码:

static List<Object> data;
private void addItem(List<Object> list) {
    try {
        data = new ArrayList<Object>();
        list.add("test");
    } catch (Exception e) {
        e.printStackTrace();        
    }
}

public static void main(String[] args) {
    ListTest test = new ListTest();
    test.addItem(data);
}

上面的代码抛出NullPointerException 下面的代码不会引发NPE。

static List<Object> data = new Vector<Object>();
private void addItem(List<Object> list) {
    try {
        list.add("test");
    } catch (Exception e) {
        e.printStackTrace();        
    }
}

public static void main(String[] args) {
    ListTest test = new ListTest();
    test.addItem(data);
}

上面的代码不会抛出NullPointerException 我不明白两者之间的区别。

即使您将data引用传递给该方法,在为data分配新列表的那一刻:

data = new ArrayList<Object>();

listdata引用现在指向2个不同的对象。 在分配之前, data设置为nulllist设置为null 但是分配后,只有list设置为null 因此,调用list.add()将导致NPE

在第二种情况下, data不以null开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM