## Why is this an issue?

According to the Java `Comparable.compareTo(T o)` documentation:

> It is strongly recommended, but not strictly required that `(x.compareTo(y)==0) == (x.equals(y))`.

> Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact.

> The recommended language is "Note: this class has a natural ordering that is inconsistent with equals."

If this rule is violated, weird and unpredictable failures can occur.

For example, in Java 5 the `PriorityQueue.remove()` method relied on `compareTo()`, but since Java 6 it has relied on `equals()`.

### Noncompliant code example

    public class Foo implements Comparable<Foo> {
      @Override
      public int compareTo(Foo foo) { /* ... */ }      // Noncompliant as the equals(Object obj) method is not overridden
    }

### Compliant solution

    public class Foo implements Comparable<Foo> {
      @Override
      public int compareTo(Foo foo) { /* ... */ }      // Compliant

      @Override
      public boolean equals(Object obj) { /* ... */ }
    }