Basicamente, o método compareTo deve retornar 0 se dois objetos forem iguais, um número negativo se this < objeto e, se this > o objeto, um número positivo.
Se esse algoritmo se basear em dois números inteiros, naturais, que não somem mais do que Integer.MAX_INTEGER, ou que a subtração não seja menor que Integer.MIN_VALUE, podemos usar a formula:
valorDeRetorno = this.valor - objeto.valor;
Não é que o - faça uma comparação. Na verdade, a equaçãozinha matemática é apenas conveniente. Veja bem, acompanhe na tabela algumas possibilidades e veja como se encaixam na regra:
This.getId ct.getid() this.getId() - ct.getId() Significa que
10 8 2 this é maior
5 2 3 this é maior
2 5 -3 this é menor
5 -10 15 this é maior
A última linha foi deixada de propósito. Ela explica a razão pela qual os números devem ser naturais (>=0) para que esse truque funcione. Veja que a linha apresentou um resultado errado, pois o número negativo era pequeno o suficiente para adulterar a expressão.
Esse detalhe, e mais explicações sobre o Comparable, estão no livro Effective Java. O comparable, em especial, no capítulo 3, item 11, que podem ser lidos nos exemplos no site oficial do livro.