Fórum dúvida com o método compareTo #569900

09/04/2009

0

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
Donizeti

Donizeti

Responder

Posts

09/04/2009

Ricardo Staroski

[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]
Responder

Gostei + 0

09/04/2009

Carlos Heuberger

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:
this.charAt(k)-anotherString.charAt(k)
...
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 []]
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar