dúvida com o método compareTo
Galera tenho o seguinte código:
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
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));
}
}
Donizeti
Curtidas 0
Respostas
Ricardo Staroski
09/04/2009
[quote="Donizeti"]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
Não, pela definição da interface [b]Comparable[/b], o método [b]compareTo[/b] deve retornar um [b]valor negativo[/b] ([i]não necessariamente -1[/i]), [b]zero[/b] ou um [b]valor positivo[/b] ([i]não necessariamente +1[/i]).
Você deve ter se confundido pois é comum ver exemplos utilizando apenas o -1, 0 e +1...
No caso da classe [b]String[/b], o [b]compareTo[/b] dela deve utilizar o [b]hashcode[/b] para fazer a comparação, por isso os valores negativos podem ser menores que -1 e os positivos maiores que +1.
No link abaixo está a documentação da interface [b]Comparable[/b]:
[url]http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html#compareTo(T)[/url]
GOSTEI 0
Carlos Heuberger
09/04/2009
32 é exatamente a diferença entre o código (ASCII) da letra maiuscula e o da minuscula...
O compareTo compara letra por letra e retorna a subtração da primeira diferença que achar.
[quote="documentação do String.compareTo()"]...
In this case, compareTo returns the difference of the two character values at position k in the two string -- that is, the value:...
O hashCode não tem relação direta com a [i]ordem[/i] das Strings...
inclusive existem Strings diferentes que retornam o mesmo hashCode. Postei uns exemplos num tópico aqui há muito tempo atras:
"21".hashCode() == "1P".hashCode()
"10".hashCode() == "0O".hashCode() // 0O = zero e a letra o-maiusculo
[]]
this.charAt(k)-anotherString.charAt(k)
GOSTEI 0