String Comparison: == vs equals() vs compareTo()
1Concept
1. `==` checks reference identity (whether both variables point to the exact same memory address). 2. `equals()` checks character content equivalence. 3. `compareTo()` performs lexicographical comparison, returning 0 if equal, negative if this string precedes the argument, or positive if it follows.
2Architecture Diagram
s1 ("Alpha") == s2 ("Alpha") ---> Checks memory pointer address
s1.equals(s2) ---> Compares char-by-char content
s1.compareTo(s2) ---> Lexicographical distance3Code Example
Core Java
public class StringComparisonDemo {
public static void main(String[] args) {
String strA = "Java21";
String strB = new String("Java21");
String strC = "Kotlin";
System.out.println("Reference Check (==): " + (strA == strB));
System.out.println("Content Check (.equals): " + strA.equals(strB));
System.out.println("Lexical (.compareTo): " + strA.compareTo(strC));
}
}4Expected Output
Reference Check (==): false Content Check (.equals): true Lexical (.compareTo): -1
5Key Takeaways
- ✓NEVER compare strings with `==`; always use `.equals()` or `.equalsIgnoreCase()`.
- ✓Use `"expected".equals(actual)` to prevent NullPointerExceptions when actual is null.
- ✓`compareTo()` is essential for sorting algorithms and TreeSet/TreeMap ordering.