В дополнение к вещи переполнения вы должны заметить, что версия с substraction не дает одинаковых результатов .
Если вы знаете, не будет переполнения, вы можете использовать что-то вроде этого:
public int compareTo(Integer anotherInteger) {
return sign(this.value - anotherInteger.valuel);
}