Como comparar strings corretamente em Java?

A comparação de strings em Java deve ser feita corretamente utilizando métodos específicos como equals() e compareTo() para evitar erros inesperados.

Como comparar strings corretamente em Java?

Em Java, a comparação de strings deve ser feita de maneira adequada para evitar erros de lógica. Como as strings são objetos, a comparação direta com == pode não funcionar como esperado.

Comparando strings com equals()

O método mais correto para comparar strings é equals(), pois verifica se o conteúdo das strings é igual.

public class ComparacaoStrings {
    public static void main(String[] args) {
        String s1 = "Java";
        String s2 = "Java";
        String s3 = new String("Java");

        System.out.println(s1.equals(s2)); // true
        System.out.println(s1.equals(s3)); // true
    }
}

Neste caso, equals() compara o conteúdo das strings e retorna true se forem iguais.

Evitando erros com ==

O operador == compara referências de memória, e não o conteúdo da string.

String s1 = "Java";
String s2 = new String("Java");
System.out.println(s1 == s2); // false

Aqui, s1 e s2 apontam para locais diferentes na memória, então a comparação com == retorna false.

Comparando strings ignorando maiúsculas e minúsculas

Se precisar comparar strings sem diferenciar letras maiúsculas e minúsculas, use equalsIgnoreCase():

String nome1 = "Java";
String nome2 = "java";
System.out.println(nome1.equalsIgnoreCase(nome2)); // true

Comparação alfabética com compareTo()

O método compareTo() compara strings em ordem alfabética:

String a = "apple";
String b = "banana";
System.out.println(a.compareTo(b)); // retorna um valor negativo pois 'apple' vem antes de 'banana'

Se compareTo() retornar:

  • Negativo: A string é menor lexicograficamente.
  • Zero: As strings são iguais.
  • Positivo: A string é maior lexicograficamente.

Conclusão

Para comparar strings em Java corretamente, prefira equals() para verificar igualdade de conteúdo e compareTo() para ordenar alfabeticamente. Evite usar == para evitar erros de referência de memória.

A comparação de strings é uma das armadilhas mais comuns para iniciantes em Java. Muitos programadores vindos de outras linguagens acabam utilizando == sem perceber que isso compara referências de memória e não o conteúdo da string. Isso pode levar a bugs difíceis de rastrear. Uma prática recomendada é sempre utilizar equals() para comparar o conteúdo e equalsIgnoreCase() quando a diferenciação de maiúsculas e minúsculas não for necessária. Outra dica é armazenar strings frequentemente utilizadas no pool de strings do Java, utilizando intern(), para reduzir o consumo de memória e melhorar a performance.

Algumas aplicações:

  • Comparação de entradas do usuário em aplicações web
  • Verificação de senhas ou credenciais
  • Ordenação de listas alfabéticas
  • Filtragem e pesquisa de dados em sistemas

Dicas para quem está começando

  • Sempre use equals() para comparar strings
  • Se precisar ignorar maiúsculas e minúsculas, utilize equalsIgnoreCase()
  • Evite == para comparar strings, pois ele verifica referências de memória
  • Para ordenar palavras, utilize compareTo()
  • Teste diferentes formas de comparação para entender seu funcionamento

Contribuições de Patrícia Neves

Compartilhe este tutorial: Como comparar strings corretamente em Java

Compartilhe este tutorial

Continue aprendendo:

O que é o conceito de passagem por valor em Java

Java utiliza o conceito de passagem por valor, onde os parâmetros de métodos recebem cópias dos valores originais.

Tutorial anterior

Como converter um tipo de dado em outro em Java

A conversão de tipos em Java pode ser feita de forma implícita ou explícita, dependendo do tipo de dado e do contexto de uso.

Próximo tutorial