为啥非空列表会抛出空指针异常?

Posted

技术标签:

【中文标题】为啥非空列表会抛出空指针异常?【英文标题】:Why does a non-empty List throw a Null Pointer Exception?为什么非空列表会抛出空指针异常? 【发布时间】:2015-09-19 04:53:05 【问题描述】:

我有一个列表数组“详细信息”。

List<HistoryDetails> details

其中 HistoryDe​​tails 是一个包含字符串的对象。

当我检查尺寸时,它给了我一个正值。

details.size()

但是当我尝试访问一个元素时,它会抛出一个空指针异常。

details.get(0).getFirstElement();


Attempt to invoke virtual method 'java.lang.String com.HistoryDetails.getFirstElement()' on a null object reference

我在检查大小的下一行调用元素。因此,不应重置任何内容。有什么问题?

【问题讨论】:

【参考方案1】:

具有许多项的列表details 可以使第一项为空对象。在使用该项目之前检查 null。

if(details.get(0)!=null)
details.get(0).getFirstElement();

【讨论】:

【参考方案2】:

看起来detailsList,但List 的第一个元素为空。也就是说,它看起来像details.get(0) == null

【讨论】:

【参考方案3】:

因为它包含 null。

Log.d("TEST", details.get(0)); //should return null

【讨论】:

【参考方案4】:

这样可以避免空指针异常:

if (!details.isEmpty()) 
    details.get(0).getFirstElement();

【讨论】:

以上是关于为啥非空列表会抛出空指针异常?的主要内容,如果未能解决你的问题,请参考以下文章

赋值操作期间未抛出空指针异常

为啥grails在第一次访问hasMany关系时抛出空指针异常?

JSONObject 创建抛出空指针异常

为何将未被初始化的Integer变量赋值给int变量时会抛出空指针异常?

为何将未被初始化的Integer变量赋值给int变量时会抛出空指针异常?

为啥这个 Linq 方法会抛出空引用异常