有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java奇怪的抛出空指针的地方

我尝试使用以下代码检查字段是否为空:

其余的代码循环遍历对象的ArrayList,同时尝试查看某个字段是否为null,以便从列表中选择它们。这个片段是为了测试对象的某个字段是否为null

if(obj.getfield() != null)
{
    //Take it out of the list
}
else
{
    //Do nothing
}

然而,这条线是obj。getfield()!=每当null返回null时,它都会抛出NullPointerException。猜中原因了吗

非常感谢

编辑:obj==null返回false


共 (2) 个答案

  1. # 1 楼答案

    结果是objnull,因此不能调用它的方法getfield()

    But usually java would still allow me to compare a null to a null.

    你不是在比较nullnull,你是在比较

    if (null.getfield() != null)
    

    事实上,唯一的表达方式

    obj.getfield()
    

    正在抛出异常,因此是否将其与null进行比较并不重要

  2. # 2 楼答案

    NPE的唯一合理解释是:

        if (obj.getfield() != null)
    

    obj在那一点上是null

    • 检查obj是否已初始化为非空
    • 检查obj是否未被更改
    • 请检查您是否声明了一个本地obj,该本地obj会隐藏具有相同名称的实例变量。。。或者类似的 价值观
    • 如果obj的值来自其他地方,请找出为什么该值是null

    使用==比较对象引用不会引发NullPointerException

    (如果装箱的值是null,那么比较原始数值类型和装箱类型可以产生一个NPE…但是假设obj是一个引用类型,在这里就不会发生这种情况。但是如果你足够疯狂地声明private int obj…)


    如果这不能回答你的问题,那么请提供一个SSCCE来说明问题