== 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

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


=== Compliant solution

[source,java]
----
public class Foo implements Comparable<Foo> {
  @Override
  public int compareTo(Foo foo) { /* ... */ }      // Compliant

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


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Override "equals(Object obj)" to comply with the contract of the "compareTo(T o)" method


'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
