Duvidas com o método compareTo

Galera tenho o seguinte código:

public static void main(String[] args) {
        // TODO code application logic here
     String s1= new String("hello");
     // s1 é a copia de "hello"
     String s2="goodbye";
     String s3="Happy birthday";
     String s4="happy birthday";

     System.out.println("Comparando s1/s2 "+s1.compareTo(s2));
     System.out.println("Comparando s2/s1 "+s2.compareTo(s1));
     System.out.println("Comparando s1/s1 "+s1.compareTo(s1));
     System.out.println("Comparando s3/s4 "+s3.compareTo(s4));
     System.out.println("Comparando s4/s3 "+s4.compareTo(s3));
         
    }

}

a saída dele é a seguinte:

Comparando s1/s2 1
Comparando s2/s1 -1
Comparando s1/s1 0
Comparando s3/s4 -32
Comparando s4/s3 32

pelo o que eu entendi esse método retorna 1 se maior, 0 se igual e -1 se menor , me corrijam se eu
estiver errado .Por que quando comparo s1/s2 ele retorna 1 e qual a razão dele retorna -32 e 32
comparando s3/s4 e s4/s3?Esse tamanho (maior , menor) seria a quantidade de caracters da minha String?

agradeço desde já quem puder me ajudar :smiley:

Na verdade, ele devolve valores positivos, negativos, e zero. Não há garantia de que os valores sejam +1 e -1.

Quando você implementa a interface Comparable, as regras são as mesmas.

ola rubinelli entendi o que voçê quiz dizer. Mais ainda to com uma dúvida.
Quando eu faço a comparação s1.compareTo(s2), ele me retorna 1 positivo,
como pode ser , se a string s1 é menor que a string s2. Quando eu falo menor
é que eu entendi que esse tamanho é por número de caracteres , me corrija se eu
tiver errado.

agradeço a ajuda…wlu

Na verdade, esse valor é a diferença entre o valor unicode do primeiro caractere diferente. Entre “g” e “h” a diferença é 1, mas entre “h” e “H” a diferença é de 32 caracteres.

obrigado rubinelli agora sim eu entendi…

wleu abraço