Phase 8 of 20 · Topic 8.2

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 distance

3Code 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.