我正在获取以下程序的空指针异常

时间:2014-10-16 06:57:22

标签: java session variables if-statement nullpointerexception

    /*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但我必须检查会话更新值时的情况。我需要知道如何检查这些变量名称和地址是否为空。

5 个答案:

答案 0 :(得分:5)

假设您的情况正确,请更改:

if((name!=null || address!=null)||(!(name.equals("")||address.equals("")))){

为:

if((name!=null || address!=null)||(!("".equals(name)||"".equals(address)))){

<强>解释
使用"".equals(name),即使namenull,也可以保证(因为您在上一个表达式中使用||,这是可能的)比较将返回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,则此函数检查两者。