Java - equals() method

What is equals() method?

equals() method is used to compare the two objects for Equality.

The following code compares the references of two objects to test whether they are equal.

It is comparing the memory address of the two objects.

Object obj1;
Object obj2;

if (obj1 == obj2) {
        /* obj1 and obj2 are the same object based on identity */
}
else {
        /* obj1 and obj2 are different objects based on identity */
}

Default Implementation

The default implementation of equals() method in the Object class performs identity based comparison for equality.

The implementation of the method is as follows.

public boolean equals(Object obj) {
        return (this == obj);
}

Your Implementation

We can provide our own implementation to compare the contained value.

For example, the following code compare two point objects. Two point objects are consider equal if they represent the same coordinates.

Demo

class Point {
  private int x;
  private int y;

  public Point(int x, int y) {
    this.x = x;//from w  w  w .j ava  2  s .  c om
    this.y = y;
  }
  /* Re implement the equals() method */
  public boolean equals(Object otherObject) {
    // Are the same?
    if (this == otherObject) {
      return true;
    }

    // Is otherObject a null reference?
    if (otherObject == null) {
      return false;
    }

    // Do they belong to the same class?
    if (this.getClass() != otherObject.getClass()) {
      return false;
    }

    // Get the reference of otherObject in a Point variable
    Point otherPoint = (Point) otherObject;

    // Do they have the same x and y coordinates
    boolean isSamePoint = (this.x == otherPoint.x && this.y == otherPoint.y);

    return isSamePoint;
  }

  /*
   * Re implement hashCode() method of the Object class, which is a requirement
   * when you re implement equals() method
   */
  public int hashCode() {
    return (this.x + this.y);
  }
}

public class Main {
  public static void main(String[] args) {
    Point pt1 = new Point(10, 10);
    Point pt2 = new Point(10, 10);
    Point pt3 = new Point(10, 20);
    Point pt4 = pt1;

    System.out.println("pt1 == pt1: " + (pt1 == pt1));
    System.out.println("pt1.equals(pt1): " + pt1.equals(pt1));

    System.out.println("pt1 == pt2: " + (pt1 == pt2));
    System.out.println("pt1.equals(pt2): " + pt1.equals(pt2));

    System.out.println("pt1 == pt3: " + (pt1 == pt3));
    System.out.println("pt1.equals(pt3): " + pt1.equals(pt3));

    System.out.println("pt1 == pt4: " + (pt1 == pt4));
    System.out.println("pt1.equals(pt4): " + pt1.equals(pt4));
  }
}

Result