Java's equality operator "= =" is used for reference comparison. It checks if the both the references point to the same memory location.
In the above example while creating literal String (i.e. s1 & s2), JVM first searches for the occurence of that literal in String pool. If found a match, the same reference will be provided to the new string.
Hence the expression is evaluated as (s1 == s2) ==> True
However for new String("Hello"), the new string will be created in heap memory (and not in String pool) with a new reference.
Hence the expression is evaluated as (s1 == s3) ==> False
Whereas, equals method compares the content of the objects.
Usage of equals() is always recommended. Steps performed during equals() check is performed.
In the above example while creating literal String (i.e. s1 & s2), JVM first searches for the occurence of that literal in String pool. If found a match, the same reference will be provided to the new string.
Hence the expression is evaluated as (s1 == s2) ==> True
However for new String("Hello"), the new string will be created in heap memory (and not in String pool) with a new reference.
Hence the expression is evaluated as (s1 == s3) ==> False
Whereas, equals method compares the content of the objects.
Usage of equals() is always recommended. Steps performed during equals() check is performed.
- First, reference equality is checked (i.e. using "==" Equality operator). if the references match, then no further checks are performed.
- However, if the reference match (e.g. 2 String references) fails, then the length is compared. If lengths differ, then we know for sure that equality check will fail. Hence no further checks are performed.
- Only at this point, will actual content comparison take place. It is a short-hand comparison (i.e not all the characters will be compared)
No comments:
Post a Comment