Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is there a "==" inside String.equals?

Tags:

java

string

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;
    }
like image 762
arjun Avatar asked Jun 06 '26 20:06

arjun


2 Answers

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:

  • Is the other reference equal to this? If so, return true.
  • Is the other reference null? If so, return false.
  • Does the other reference refer to an object of the wrong type? If so, return false.

Then you go on to type-specific checks.

like image 145
Jon Skeet Avatar answered Jun 09 '26 11:06

Jon Skeet


== is true when comparing with the same object - given an efficiency increase more likely than just about any other class due to String interning.

Note that this code:

return (this == anotherString) ? true : <rest of line>

could have been written (more elegantly IMHO) as:

return this == anotherString || <rest of line>
like image 31
Bohemian Avatar answered Jun 09 '26 09:06

Bohemian



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!