Difference Between == Operator and equals() Method in Java (original) (raw)

Last Updated : 4 Jan, 2025

In Java, the equals() method and the == operator are used to compare objects. The main difference is that **string equals() method compares the _content equality of two strings while the **== operator compares the reference or memory location of objects in a heap, whether they point to the same location or not.

**Example:

Java `

// the concept of .equals() and == operator public class Geeks { public static void main(String[] args) {

    String s1 = "HELLO";
    String s2 = "HELLO";
    String s3 =  new String("HELLO");

    System.out.println(s1 == s2);
    System.out.println(s1 == s3); 
    System.out.println(s1.equals(s2));
    System.out.println(s1.equals(s3)); 
}

}

`

Output

true false true true

**Explanation: When we use the == operator for s1 and s2 comparison, the result is true as both have the same addresses in the String constant pool.

.equals() Method vs == in Java

Aspects Equality (==) Operator .equals() Method
Compares Compares if two references point to the same memory location. Compares the content of objects.
Working Primitives and object references. Only objects.
Customizable Cannot be overridden. Can be overridden in custom classes.
Default Behavior Compares memory addresses. Compares references unless overridden.

Equality Operator(==)

The == operator checks **reference equality for objects and **value equality for primitives.

**Example 1:

Java `

// == operator for compatible data types class Geeks { public static void main(String[] args) {

      // integer-type
    System.out.println(10 == 20);

    // char-type
    System.out.println('a' == 'b');

    // char and double type
    System.out.println('a' == 97.0);

    // boolean type
    System.out.println(true == true);
}

}

`

Output

false false true true

**Example 2: If we apply == for object types then, there **should be compatibility between argument types (either child to parent or parent to child or same type). Otherwise, we will get a compile-time error.

Java `

// == operator for incompatible data types class Geeks { public static void main(String[] args) {

    Thread t = new Thread();
    Object o = new Object();
    String s = new String("GEEKS");

    System.out.println(t == o);
    System.out.println(o == s);
  
    // uncomment the below print 
    // statement to see the error.
   // System.out.println(t==s);  
}

}

`

**Output:

./Test.java:15: error: incomparable types: Thread and String
System.out.println(t==s);
^
1 error

String equals() Method

In Java, the **String equals() method compares the two given strings based on the data/content of the string. If all the contents of both strings are the same, it returns true. If all characters are not matched, then it **returns false.

**Example:

Java `

public class Geeks { public static void main(String[] args) {

      // Create two new Thread objects
    Thread t1 = new Thread();
    Thread t2 = new Thread();
    
      // Assign t3 to reference same
      // Thread object as t1
    Thread t3 = t1;

    // Create two String Objects with
      // Same content
    String s1 = new String("GEEKS");
    String s2 = new String("GEEKS");

    System.out.println(t1 == t3);
    System.out.println(t1 == t2);
    System.out.println(s1 == s2);

    System.out.println(t1.equals(t2));
    System.out.println(s1.equals(s2));
}

}

`

Output

true false false false true

**Java String Pool and Memory

String s1 = "HELLO"; // String pool

String s2 = new String("HELLO"); // Heap