← Back to Questions
Java

Difference between == and equals() in Java?

Learn Difference between == and equals() in Java? with simple explanations, real-time examples, interview tips and practical use cases.

Difference Between == and equals() in Java

In Java, both == operator and equals() method are used for comparison, but they work differently.

In simple words:

== compares memory references (addresses), while equals() compares actual object values or content.


Why This Difference is Important?

Understanding this difference is very important for:

  • String comparison
  • Collection operations
  • Database entities
  • Spring Boot applications
  • Microservices communication
  • Interview questions
  • Bug prevention

Comparison Overview Diagram


Object A

      |
      +-------> Memory Address

Object B

      |
      +-------> Memory Address

==  ---> Compares Addresses

equals() ---> Compares Content


What is == Operator?

== is an operator used to compare:

  • Primitive values
  • Object references

Primitive Comparison Using ==

int a = 10;
int b = 10;

System.out.println(a == b);

Output

true

Why?

Because primitive values are directly compared.


Primitive Comparison Flow


Primitive a = 10

Primitive b = 10

      |
      v

Values Compared

      |
      v

Result = true


Object Comparison Using ==

String s1 =
    new String("Java");

String s2 =
    new String("Java");

System.out.println(
    s1 == s2
);

Output

false

Why?

Because == compares object references, not content.


Memory Diagram


s1 ----------> Object1 ("Java")

s2 ----------> Object2 ("Java")

Different Memory References


Reference Comparison Flow


Object References Compared

      |
      v

Different Memory Addresses

      |
      v

Result = false


What is equals() Method?

equals() is a method used to compare object content or logical equality.


equals() Example

String s1 =
    new String("Java");

String s2 =
    new String("Java");

System.out.println(
    s1.equals(s2)
);

Output

true

Why?

Because equals() compares actual String content.


equals() Flow


Objects Passed to equals()

      |
      v

Content Compared

      |
      v

Same Content Found

      |
      v

Result = true


Important Difference Table

Feature == Operator equals() Method
Type Operator Method
Used For Reference Comparison Content Comparison
Primitives Compares Values Not Applicable
Objects Compares References Compares Content
Can Be Overridden? No Yes

Default equals() Behavior

By default, equals() from Object class behaves like ==.


Object Class Implementation

public boolean equals(
    Object obj
) {

    return (this == obj);

}

Why String equals() Works Differently?

Because String class overrides equals() method.


String equals() Logic


String Objects

      |
      v

Character-by-Character Comparison

      |
      v

Result Returned


Custom Class Example

class Employee {

    int id;

}

Comparison Example

Employee e1 =
    new Employee();

Employee e2 =
    new Employee();

System.out.println(
    e1.equals(e2)
);

Output

false

Why?

Because Employee class does not override equals().


Overriding equals()

class Employee {

    int id;

    public boolean equals(
        Object obj
    ) {

        Employee e =
            (Employee)obj;

        return this.id == e.id;

    }

}

Now Comparison

Employee e1 =
    new Employee();

e1.id = 101;

Employee e2 =
    new Employee();

e2.id = 101;

System.out.println(
    e1.equals(e2)
);

Output

true

Custom equals() Flow


Objects Passed

      |
      v

Custom Logic Executes

      |
      v

Fields Compared

      |
      v

Logical Equality Returned


String Pool and ==

Sometimes == returns true for Strings because of String Pool.


Example

String s1 = "Java";
String s2 = "Java";

System.out.println(
    s1 == s2
);

Output

true

Why?

Both references point to same pooled String object.


String Pool Flow


"Java" Literal

      |
      v

String Pool Checked

      |
      v

Existing Object Reused


Important Interview Trap

String s1 = "Java";

String s2 =
    new String("Java");

System.out.println(
    s1 == s2
);

Output

false

Why?

  • s1 points to String Pool
  • s2 points to Heap Object

String Memory Diagram


s1 ----------> Pool Object

s2 ----------> Heap Object

Different References


equals() and Collections

Collections use equals() for searching and comparison.


Example

list.contains(obj)

What Happens?

equals() method is internally called.


Collection Flow


Object Search Requested

      |
      v

equals() Called

      |
      v

Matching Object Found


equals() and hashCode()

Whenever equals() is overridden, hashCode() should also be overridden.


Why Important?

Hash-based collections like:

  • HashMap
  • HashSet

depend on both methods.


HashMap Flow


hashCode()

      |
      v

Bucket Located

      |
      v

equals() Checks Exact Match


Difference Between Reference Equality and Logical Equality

Type Meaning
Reference Equality Same Memory Address
Logical Equality Same Data/Content

== in Banking Systems

Banking systems avoid == for entity comparison because:

  • Different objects may contain same account data
  • equals() ensures logical comparison

Banking Example

Account a1 =
    repository.findById(1);

Account a2 =
    repository.findById(1);

Why equals() Needed?

Objects may be different references but same account logically.


Banking Flow


Account Objects Loaded

      |
      v

equals() Compares Account IDs

      |
      v

Logical Match Found


equals() in E-Commerce Systems

E-commerce applications use equals() for:

  • Cart comparison
  • Order matching
  • Product equality
  • User identity validation

equals() in Spring Boot

Spring Boot applications use equals() for:

  • JPA entities
  • DTO comparisons
  • Security authentication
  • Collection operations

Spring JPA Example

@Entity
class User {

    Long id;

}

Why Override equals()?

Entity identity comparison becomes reliable.


equals() in Microservices

Microservices architectures use equals() for:

  • DTO validation
  • JSON object comparison
  • Distributed caching
  • Kafka event matching

Microservice Flow


DTO Objects Received

      |
      v

equals() Performs Logical Validation

      |
      v

Business Processing Continues


Advantages of equals()

  • Logical comparison
  • Customizable behavior
  • Framework compatibility
  • Collection support
  • Business-level equality

Disadvantages of Incorrect equals() Usage

  • Collection bugs
  • HashMap issues
  • Duplicate object problems
  • Data inconsistency

Common Interview Mistake

Many developers think == compares object content.

Actually:

  • == compares references for objects.

Another Common Mistake

Many developers override equals() but forget hashCode().

Actually:

  • Both should be overridden together.

Best Practices

  • Use == for primitives
  • Use equals() for object comparison
  • Override equals() and hashCode() together
  • Be careful with String comparison
  • Avoid == for wrapper and String content comparison

Realtime Enterprise Example

User Authentication System


Incoming User DTO

      |
      v

equals() Compares User Data

      |
      v

Authentication Validated

      |
      v

Access Granted


Related Learning Topics


Professional Interview Answer

In Java, == operator and equals() method are both used for comparison, but they work differently. The == operator compares primitive values directly and compares object references for objects, meaning it checks whether two references point to the same memory location. The equals() method compares logical equality or actual object content, and many Java classes like String override equals() to perform value-based comparison. By default, Object class equals() behaves like ==, but developers can override it to implement business-specific equality logic. Enterprise applications, Spring Boot systems, banking platforms, Hibernate ORM frameworks, REST APIs, and cloud-native microservices heavily rely on properly implemented equals() and hashCode() methods for collections, caching, entity comparison, distributed processing, authentication, and business rule validation.


Frequently Asked Questions

What does == compare in Java?

== compares primitive values and object references.

What does equals() compare?

equals() compares logical object content.

Why does String equals() work differently?

Because String class overrides equals() method.

Why should hashCode() be overridden with equals()?

Because collections like HashMap and HashSet depend on both methods.

Should == be used for String comparison?

No, equals() should be used for String content comparison.

Why this Java question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.