【问题标题】:Variable can only be null shows eclipse变量只能为null显示eclipse
【发布时间】:2012-03-23 06:17:06
【问题描述】:

我写过这样的方法

public ArrayList<T> GetDoctorDetail(String name)
{
    if (name!=null || !name.isEmpty() || name!="")
    {
        //Statements
    }
}

但在 Eclipse 中,用黄线显示下划线的名称 空指针访问:该位置的变量名只能为空。

为什么?以及解决方案是什么。

【问题讨论】:

  • 您还可以删除最后一个条件,因为 isEmpty() 检查“”

标签: java eclipse


【解决方案1】:

如果name 不为空,则条件|| 运算符根本不会计算第二个操作数。所以唯一可以计算第二个操作数的情况是name为空,在这种情况下它会抛出。

我怀疑你想要

if (name != null && !name.isEmpty())
{
    // Use name
}

或者可能:

if (name == null || name.isEmpty())
{
    // Show an error message
}

请注意,将字符串与==!= 进行比较几乎总是错误的做法,因为它比较引用。您通常会改用equals。不仅如此,它在这里无论如何也没用 - 如果它是空的,它只能等于“”,所以它与第二个操作数完全相同。

【讨论】:

    【解决方案2】:

    仅当 name = null 时,oR 条件的第一部分才会失败。因此第二部分会抛出空指针异常。

    这个条件的正确写法是

    if (name!=null && (!name.isEmpty() || name!=""))
    

    【讨论】:

      【解决方案3】:
      if (name != null && !name.isEmpty()) {
         // Now the name variable has valid content
      }
      

      注意 - 如果您创建“肯定”检查,逻辑总是更容易理解:

      if (name == null || name.isEmpty()) {
         // Now name is either null or empty
      } else {
         // Now the name has valid content
      }
      

      尽量避免检查“负”状态的条件,例如“不为空”和“不为空”。他们不过是脑筋急转弯;)

      【讨论】:

        猜你喜欢
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 2015-07-28
        相关资源
        最近更新 更多