/*line 1.*/
if((name!=null || address!=null)||(!(name.equals("")||address.equals("")))){
sessionNameModel.setObject(""+name);
sessionAddressModel.setObject(""+address);
add(sessionName);
add(sessionAddress);
}
else{
sessionNameModel.setObject("");
sessionAddressModel.setObject("");
add(sessionName);
add(sessionAddress);
}
我在第1行得到空指针异常。我知道名称和地址字段的值为null但我必须检查会话更新值时的情况。我需要知道如何检查这些变量名称和地址是否为空。
答案 0 :(得分:5)
假设您的情况正确,请更改:
if((name!=null || address!=null)||(!(name.equals("")||address.equals("")))){
为:
if((name!=null || address!=null)||(!("".equals(name)||"".equals(address)))){
<强>解释强>
使用"".equals(name)
,即使name
为null
,也可以保证(因为您在上一个表达式中使用||
,这是可能的)比较将返回false NPE。同样适用于address
。
答案 1 :(得分:2)
if((name!=null || address!=null)||(!(name.equals("")||address.equals(""))))
如果name==null
仍在检查name.equals
,这可能会导致nullpointer同样的事情发生在address.Instead使用&&
只有在它不为空时检查等于。或者,您可以按"".equals
alfasin
if((name!=null && !name.equals(""))||((address!=null && !address.equals(""))))
除讨论外,
我认为此处使用||
而不是&&
,因为此处||
可以在您的会话中添加null
,这是不合适的。
if((name!=null && !name.equals(""))&&((address!=null && !address.equals(""))))
答案 2 :(得分:2)
你可以这样尝试
if((name !=null || name.length()==0) && (address!=null || address.length()==0)){
}
else{
}
答案 3 :(得分:1)
name = null;
address = null;
if((name!=null || address!=null)||(!(name.equals("")||address.equals(""))))
分析;
首先检查name!=null
,它是 false
然后检查address!=null
, false
然后它会尝试检查是否name.equals("")
,但由于名称为空,它会崩溃,因为没有对象为名称,所以没有方法为等于强>
在查看其他行时,您必须将行更改为
if((name!=null && address!=null)&&(!(name.equals("")||address.equals(""))))
让我们分析一下新的路线;
首先检查name!=null
, false
由于所有其他条件都与 AND 相结合,并且由于其中一个是 false ,因此无需检查任何其他条件,因此执行第二行
答案 4 :(得分:1)
首先,cobait是对的:
if((name!=null || address!=null)||(!(name.equals("")||address.equals(""))))
如果变量名或变量地址为空,则仍将执行以下代码。这可能会导致您的nullpointer。
更好的表达方式是if((name != null) && (address != null)) ....
如果要为至少一个变量执行代码,如果它不为null,则应拆分if语句。
支票的另一种选择是使用apache commons library并调用函数isBlank()
。如果String不为null并且它不是emtpy,则此函数检查两者。