jdk 1.8重复的空检查在String.equalsIgnoreCase中

时间:2018-06-20 13:27:05

标签: java string nullpointerexception conditional-statements

String.equalsIgnoreCase的实现方式如下(Oracle JavaSE 1.8)

public boolean equalsIgnoreCase(String anotherString) {
    return (this == anotherString) ? true
            : (anotherString != null)
            && (anotherString.value.length == value.length)
            && regionMatches(true, 0, anotherString, 0, value.length);
}

我想知道是否需要进行(anotherString != null)检查,因为this != anotherString中已经表明anotherString不为空。

3 个答案:

答案 0 :(得分:3)

让我们假设您是对的,看看我们打电话给equalsIgnoreCase(null)时会发生什么:

  1. this == anotherString是错误的;
  2. anotherString.value.length == value.length-我们在anotherString.value上获得了NPE。

因此,anotherString != null在这里是必要且至关重要的。


  

this != anotherString已经表明anotherString不是null

不,不是。它只能说明thisanotherString是否不相等。

例如,this != nullthis != "test"都返回true

答案 1 :(得分:1)

当然有必要。

this != anotherString可能暗示anotherString是一个不同的String或anotherStringnull

答案 2 :(得分:1)

不。如果没有anotherString != null,则假设thisfooanotherStringnull

this == anotherString ---> false,
anotherString.value.length == value.length ---> NullPointerException will be thrown