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
不为空。
答案 0 :(得分:3)
让我们假设您是对的,看看我们打电话给equalsIgnoreCase(null)
时会发生什么:
this == anotherString
是错误的; anotherString.value.length == value.length
-我们在anotherString.value
上获得了NPE。因此,anotherString != null
在这里是必要且至关重要的。
this != anotherString
已经表明anotherString
不是null
。
不,不是。它只能说明this
和anotherString
是否不相等。
例如,this != null
和this != "test"
都返回true
。
答案 1 :(得分:1)
当然有必要。
this != anotherString
可能暗示anotherString
是一个不同的String或anotherString
是null
答案 2 :(得分:1)
不。如果没有anotherString != null
,则假设this
是foo
,anotherString
是null
:
this == anotherString ---> false,
anotherString.value.length == value.length ---> NullPointerException will be thrown