我试图通过使用if语句检查HashMap是否为Null来过滤此异常。如果HashMap为null,则运行一个用值加载它的方法,但似乎if语句也给出了NullPointerException。
如何重组?
sqldata
是Hashmap并且它正在其他地方加载但是它可能没有任何值(根据设计)在这种情况下我试图检查(如果HashMap为空/ null )并使用下面的代码片段重新加载它:
if (sqldata.isEmpty()||sqldata.equals(null)) {
sqldata = fileloader.dbhealthload();
}
答案 0 :(得分:1)
sqldata.equals
正在运行sqldata的方法equals
。在sqldata为null的情况下,它没有任何方法,因此java找不到它并抛出NullPointerException。您应该使用==
:
if (sqldata == null || sqldata.isEmpty()) {
sqldata = fileloader.dbhealthload();
}
答案 1 :(得分:1)
你不应该以这种方式检查null,
// Invokes method on null when sqldata is null. so, this shouldn't be done
if (sqldata.isEmpty()||sqldata.equals(null)) {
sqldata = fileloader.dbhealthload();
}
相反,您需要像这样检查null
if(sqldata == null || sqldata.isEmpty()){
sqldata = fileloader.dbhealthload();
}
答案 2 :(得分:1)
你应该使用:
if (sqldata == null || sqldata.isEmpty()) {
sqldata = fileloader.dbhealthload();
}
首先,您应该检查sqldata是否为null。之后你应该检查空虚。
答案 3 :(得分:1)
空引用没有方法。因此,您无法使用equals
测试null - 相反,您应该使用==
运算符对其进行测试。
将您的代码更改为
if(sqldata == null || sqldata.isEmpty())
答案 4 :(得分:1)
首先,您需要检查sqldata是否为null,然后您可以继续检查HashMap
是否为空。按照给定的方法。
if (sqldata==null||sqldata.isEmpty())
{
sqldata = fileloader.dbhealthload();
}
如果sqldata
为null
且使用第一sqldata.isEmpty()
in if则会抛出NullPointerException
。
答案 5 :(得分:1)
空指针异常的原因可能是您从未实例化HashMap。解决此问题的一种方法是确保始终实例化HashMap,然后按以下方式重构代码:
if(!sqldata.isEmpty()) {
do operations ...
} else {
reload ...
}
建议使用上述编程习惯。但是,如果您不想强制实例化HashMap对象,那么您需要检查它是否为null,一旦检查完毕,您应该继续检查它是否为空。那种情况下的代码是:
if(!(sqldata == null)) {
if(!sqldata.isEmpty()) {
do operations ...
}
} else {
reload or instantiate ...
then do operations ...
}
你也可以写另一种方式。
答案 6 :(得分:1)
在Java中null
不是一个对象,只是一个void引用,所以你不应该在可以为null的变量上调用.equals
。唯一正确的方法是将其与参考比较进行比较:
sqldata == null
另一件事是||
是懒惰的,这意味着一旦它找到第一个(从左到右)真值,它就不会评估其他操作数。因此,一个非常常见的模式:
sqldata == null || sqldata.isEmpty()
你应该使用它。运算符&&
也很懒,所以类似:
sqldata != null && sqldata.doStuff()
是可能的。
这同样适用于任何变量,例如String变量。
s == null || s.isEmpty()
在将字符串与文字进行比较时,应使用另一种常用模式:
"a value".equals( s )
它有效且安全,因为:
s
为null .equals可以处理它,只是没有等于null 作为指导原则,不要反过来比较字符串:
s.equals("a value")
并且不使用参考比较:
s == "a value"
字符串变量有时可以指向与文字相同的对象,但并不总是!
答案 7 :(得分:0)
当您尝试使用指向内存中没有位置的引用时,通常NullPointerException
抛出(null)。在null
引用上调用方法或尝试访问空引用的字段将触发NullPointerExecption
。
在您的代码中,您尝试使用HashMap对象的空引用来调用方法isEmpty()
。
在检查任何其他条件或使用对象引用访问方法之前,始终检查null。
例如:
HashMap sqldata = new HashMap();
if(sqldata!=null && sqldata.isEmpty())
{
sqldata = fileloader.dbhealthload();
}