我尝试使用以下代码检查字段是否为空:
其余代码循环访问对象的ArrayList,同时尝试查看某个字段是否为空,以便从列表中选择它们。此片段用于测试对象是否具有某个字段为空。
if(obj.getfield() != null)
{
//Take it out of the list
}
else
{
//Do nothing
}
但是,只要返回null,obj.getfield()!= null行就会抛出NullPointerException。运气有什么猜测它的原因吗?
非常感谢。
编辑:obj == null返回false。
答案 0 :(得分:1)
NPE的唯一合理的解释引发了这一行:
if (obj.getfield() != null)
此时obj
为null
:
obj
是否已初始化为非空obj
未被更改obj
,它隐藏了一个具有相同名称的实例变量......或类似的东西
值obj
的值来自其他地方,请找出值为null
的原因使用==
比较对象引用不会引发NullPointerException
。
(原始数字类型与盒装类型的比较可以提升NPE ...如果盒装值为null
......但是不会发生在这里,假设obj
是一个引用类型。但如果你足够坚定地声明private int obj
...)
如果这不能解答您的问题,请提供<{3}} 演示问题。
答案 1 :(得分:0)
我的猜测是obj为null。
您需要像这样创建obj实例
Object obj = new Object();
修改
另一种可能性是你没有声明getField()在任何obj的实例的构造函数内返回的字段。 实施例
Class x
int[] array;
public x(){
//does not contain 'array = new int[5];'
}
答案 2 :(得分:0)
obj
为null
会发生什么情况,因此您无法调用其方法getfield()
。
但通常java仍允许我将null与null进行比较。
您没有将null
与null
进行比较,而是进行比较
if (null.getfield() != null)
实际上,单独表达
obj.getfield()
抛出异常,因此如果将其与null
进行比较并不重要。
答案 3 :(得分:0)
您可以通过先测试obj是否为null来避免异常,因此对obj字段的测试不在null对象上。
if(obj != null && obj.getfield() != null)
{
//Take it out of the list
}
如果什么都不做,你似乎不需要else子句。希望这很有用。