Why Java is comparing (this == another String) inside equalsIgnoreCase method for checking a string insensitive?
Also, String equals is comparing (this == another String) to compare two objects?
Java 6: String Class equalsIgnoreCase implementation given below.
public boolean equalsIgnoreCase(String anotherString) {
return (this == anotherString) ? true :
(anotherString != null) && (anotherString.count == count) &&
regionMatches(true, 0, anotherString, 0, count);
}
Java 6: String Class equals implementation given below.
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
Why Java is comparing (this == another String) inside equalsIgnoreCase method for checking a string insensitive?
It's an optimization. If the reference passed in is exactly the same as this
, then equals
must return true
, but we don't need to look at any fields etc. Everything is the same as itself. From the documentation for Object.equals(Object)
:
The equals method implements an equivalence relation on non-null object references:
- It is reflexive: for any non-null reference value x, x.equals(x) should return true.
- ...
It's very common for an equality check to start with:
this
? If so, return true.Then you go on to type-specific checks.
See more on this question at Stackoverflow