== Why is this an issue? Assuming that a comparator or `compareTo` method always returns -1 or 1 if the first operand is less than or greater than the second is incorrect. The specifications for both methods, `Comparator.compare` and `Comparable.compareTo`, state that their return value is "a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object." Even if a specific comparator always returns -1, 0, or 1, this is only an implementation detail, not the API contract developers can rely on. == How to fix it Replace - `== -1` with `< 0` (the first operand is less than the second) - `== 1` with `> 0` (the first operand is greater than the second) - `!= -1` with `>= 0` (the first operand is greater than or equal to the second) - `!= 1` with `\<= 0` (the first operand is less than or equal to the second) === Code examples ==== Noncompliant code example [source,java,diff-id=1,diff-type=noncompliant] ---- public class Main { boolean isAGreaterThanB(Comparable a, Integer b) { return a.compareTo(b) == 1; // Noncompliant, check for constant return value } public static void main(String[] args) { ByteComparator comparator = new ByteComparator(); if (comparator.compare((byte) 23, (byte) 42) == -1) { // Noncompliant, check for constant return value System.out.println("23 < 42"); } else { System.out.println("23 >= 42"); } } static class ByteComparator implements Comparator { @Override public int compare(Byte a, Byte b) { return a - b; } } } ---- ==== Compliant solution [source,java,diff-id=1,diff-type=compliant] ---- public class Main { boolean isAGreaterThanB(Comparable a, Integer b) { return a.compareTo(b) > 0; // Compliant, check for positive return value } public static void main(String[] args) { ByteComparator comparator = new ByteComparator(); if (comparator.compare((byte) 23, (byte) 42) < 0) { // Compliant, check for negative return value System.out.println("23 < 42"); } else { System.out.println("23 >= 42"); } } static class ByteComparator implements Comparator { @Override public int compare(Byte a, Byte b) { return a - b; } } } ---- == Resources === Documentation * https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T-[Java SE 8 API Specification: Comparable.compareTo] * https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#compare-T-T-[Java SE 8 API Specification: Comparator.compare] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Only the sign of the result should be examined. endif::env-github,rspecator-view[]