【问题标题】:I am getting null pointer exception for following program我收到以下程序的空指针异常
【发布时间】:2023-03-30 09:04:02
【问题描述】:
    /*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 行遇到空指针异常。我知道名称和地址字段的值为空,但我必须检查会话更新值的情况。我需要知道如何检查这些变量名称和地址是否为空..

【问题讨论】:

  • 您很可能摆脱 if 语句并使用三元组。 sessionNameModel.setObject(name == null ? "" : name.toString());

标签: java session variables if-statement nullpointerexception


【解决方案1】:

假设你的条件是正确的,改变:

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

到:

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

说明:
通过使用"".equals(name),您可以保证即使namenull(这是可能的,因为您在前面的表达式中使用了||),比较将返回false 而不是NPE。 address 也是如此。

【讨论】:

    【解决方案2】:
    if((name!=null || address!=null)||(!(name.equals("")||address.equals(""))))
    

    如果name==null 仍然在检查name.equals,这可能会导致地址发生空指针同样的事情。而是使用&& 仅在不为空时检查等于。或者您可以按照建议使用"".equals alfasin

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

    除了讨论,

    我认为这里不需要使用||,而是使用&&,因为这里|| 可以在您的会话中添加null,这是不正确的。

    if((name!=null && !name.equals(""))&&((address!=null && !address.equals(""))))
    

    【讨论】:

      【解决方案3】:

      你可以这样试试

      if((name !=null || name.length()==0) && (address!=null || address.length()==0)){
      
      }
      else{
      
      }
      

      【讨论】:

        【解决方案4】:
        name = null;
        address = null;
        
        if((name!=null || address!=null)||(!(name.equals("")||address.equals(""))))
        

        分析; 首先检查name!=null,它是false 然后检查address!=null,这是false 然后它会尝试检查是否name.equals(""),但是由于name 为空,它会崩溃,因为没有对象作为name 并且没有方法作为equals

        在查看其他行时,您必须将行更改为

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

        让我们分析一下新行; 首先检查name!=null,这是false 由于所有其他条件都与 AND 组合,并且其中一个为 false,因此无需检查其他任何内容,因此执行第二行

        【讨论】:

          【解决方案5】:

          起初cobait是对的:

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

          如果变量名或变量地址为空,下面的代码仍然会被执行。这可能是导致您的空指针的原因。

          更好的表达方式是if((name != null) && (address != null)) ....

          如果你想至少为其中一个变量执行代码,如果它不为空,你应该拆分你的 if 语句。

          您检查的另一种选择是使用apache commons library 并调用函数isBlank()。该函数同时检查 String 是否为 null 以及是否为 emtpy。

          【讨论】:

            猜你喜欢
            • 2014-11-14
            • 1970-01-01
            • 1970-01-01
            • 2011-09-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多