...
The general contract for compareTo()
from Java SE 6 API [API 2006] states that
- The implementor must ensure
sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
for allx
andy
. (This implies thatx.compareTo(y)
must throw an exception ify.compareTo(x)
throws an exception.)- The implementor must also ensure that the relation is transitive:
(x.compareTo(y) > 0 && y.compareTo(z) > 0)
impliesx.compareTo(z) > 0
.- Finally, the implementor must ensure that
x.compareTo(y) == 0
implies thatsgn(x.compareTo(z)) == sgn(y.compareTo(z))
for allz
.- 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.In the foregoing description, the notation
sgn(expression)
designates the mathematical signum function, which is defined to return either -1, 0, or 1 depending on whether the value of the expression is negative, zero or positive.
...
Tool | Version | Checker | Description |
---|---|---|---|
Coverity | 7.5 | FB.RU_INVOKE_RUN | Implemented |
Related Guidelines
CWE-573. Improper following of specification by caller |
Bibliography
...