if语句中的Java NullPointerException

时间:2015-07-23 15:17:39

标签: java

我目前在以下代码中获得NullPointerException。

else if (isEmpty(href))
    System.err.println("This is an empty link: " + href);

isEmpty函数如下所示。

public boolean isEmpty(String HREF){
    if (HREF.equals("") || HREF.equals("null") || HREF == null || HREF.isEmpty())  
        return true;
    else 
        return false;
}

是因为我无法将字符串与null进行比较吗?我该怎么做才能使这个功能起作用?

5 个答案:

答案 0 :(得分:12)

您的isEmpty测试只是按错误的顺序执行。改变这个:

if (HREF.equals("") || HREF.equals("null") || HREF == null || HREF.isEmpty())  
    return true;

为:

if (HREF == null || HREF.equals("") || HREF.equals("null") || HREF.isEmpty())  
    return true;

如果HREF实际上是null,那么第一次测试将short-circuit if的剩余部分,您将无法获得NPE。

(顺便说一下,明确测试HREF.equals("")并调用HREF.isEmpty()是多余的。你只需要做一个或另一个。)

顺便说一句,我建议,将样法简化为单return语句的方式:

public boolean isEmpty(String HREF){
    return HREF == null || HREF.isEmpty()) || HREF.equals("null");
}

(另外,如果针对字符串"null"进行测试是尝试检查null值,那么您也可以放弃该条件。事实上,您可以使用类似Apache Commons的内容。 StringUtils.isEmpty(CharSequence)方法来做你想做的事。)

答案 1 :(得分:1)

更改if中的顺序将解决它。

public boolean isEmpty(String HREF) {
    return HREF == null || HREF.equals("") || HREF.equals("null") ||  HREF.isEmpty();
}

这样,当HREF == null时,不会评估其他任何测试。

答案 2 :(得分:1)

当HREF为null时,使用点运算符引用它将抛出空指针异常。

解决此问题的不同方法如下

  public boolean isEmpty(String HREF){
      if (HREF == null ||HREF.equals("") || HREF.equals("null") ||    HREF.isEmpty())  
          return true;
      else 
          return false;
 }

这只是通过简短的布尔运算来重新安排你的条件,这将避免在后续检查中引用空指针。

OR

  public boolean isEmpty(String HREF){
      //handling null case first of all
      if(HREF == null)   return true;

      if(HREF.equals("") || HREF.equals("null") ||    HREF.isEmpty())  
          return true;
      else 
          return false;
 }

同时避免多余使用HREF.equals(“”)和HREF.isEmpty()之类的检查。

检查等于字符串对象的另一个最佳做法是在"".equals(HREF)"null".equals(HREF)中使用开头的常量,这里我们非常确定"null"是一个有效的字符串哪个不是null

答案 3 :(得分:0)

你不能在这里调用null的方法HREF.equals("") 通常的做法是更改订单"".equals(HREF)。这是安全的。而且你不需要这样HREF.isEmpty()部分。 所以代码将成为

public boolean isEmpty(String HREF){
     return HREF == null || "".equals(HREF) || "null".equals(HREF);
}

我在这里删除了不必要的if,因为我们返回了布尔表达式的结果。

答案 4 :(得分:-1)

如果HREF为null,则执行以下操作:

HREF.equals("")

将抛出NPE。

先进行空检查:

HREF != null && /* rest of conditions */