Java para iniciantes: equals() ou ==? Entendendo a comparação de Strings
Java para iniciantes: equals() ou ==? Entendendo a comparação de Strings
Durante meus primeiros desafios de Java na DIO, encontrei exercícios aparentemente simples: ler uma informação, comparar textos e tomar uma decisão usando if e else.
Apesar de serem desafios básicos, eles trazem um conceito muito importante para quem está começando em Java: a diferença entre equals() e == na comparação de Strings.
Resolvi compartilhar esse aprendizado porque esse é um daqueles detalhes que parecem pequenos no começo, mas podem gerar bastante confusão para quem está aprendendo.
O problema
Imagine que precisamos verificar se um código de operação bancária é válido.
Por exemplo, o sistema aceita:
DEPOSITO
SAQUE
TRANSFERENCIA
Podemos receber uma informação do usuário utilizando Scanner:
Scanner scanner = new Scanner(System.in);
String operacao = scanner.nextLine();
Agora precisamos verificar se o texto digitado corresponde a uma das opções permitidas.
Uma forma correta seria:
if (operacao.equals("DEPOSITO")) {
System.out.println("VALID");
}
Aqui aparece o método equals().
O que faz o equals()?
De forma simples, quando usamos:
operacao.equals("DEPOSITO")
estamos perguntando:
O conteúdo de operacao é exatamente igual ao texto "DEPOSITO"?
Se for, o resultado será true.
Se não for, será false.
Por exemplo:
String codigo = "AG123";
System.out.println(codigo.equals("AG123"));
Resultado:
true
Mas:
String codigo = "AG123";
System.out.println(codigo.equals("AG124"));
Resultado:
false
E onde entra o ==?
É aqui que pode surgir uma dúvida comum para quem está começando.
Em Java, == é usado para comparar valores de tipos primitivos, como:
int idade = 20;
if (idade == 20) {
System.out.println("Idade correta");
}
Porém, String é um objeto.
Quando usamos == com objetos, estamos verificando se as referências apontam para o mesmo objeto, e não fazendo a comparação de conteúdo da forma que normalmente queremos.
Por isso, para comparar o conteúdo de duas Strings, devemos utilizar:
String codigo1 = "AG123";
String codigo2 = "AG123";
if (codigo1.equals(codigo2)) {
System.out.println("Os códigos são iguais");
}
Essa é uma regra importante para quem está começando:
Para comparar o conteúdo de Strings em Java, utilize equals().
Um exemplo parecido com os desafios
Um dos exercícios pode ser resolvido assim:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String codigoInformado = scanner.nextLine();
String codigoEsperado = scanner.nextLine();
if (codigoInformado.equals(codigoEsperado)) {
System.out.println("ACESSO LIBERADO");
} else {
System.out.println("ACESSO NEGADO");
}
scanner.close();
}
}
Se a entrada for:
AG123
AG123
a saída será:
ACESSO LIBERADO
Se a entrada for:
AG123
AG124
a saída será:
ACESSO NEGADO
Maiúsculas e minúsculas também importam
Outro ponto interessante dos desafios foi perceber que equals() faz uma comparação exata.
Por exemplo:
String codigo = "BANCO01";
System.out.println(codigo.equals("BANCO01"));
Resultado:
true
Mas:
System.out.println(codigo.equals("banco01"));
Resultado:
false
Ou seja, BANCO01 e banco01 são considerados diferentes.
Isso é importante em situações nas quais a regra exige que os caracteres sejam exatamente iguais.
equalsIgnoreCase()
Java também possui:
equalsIgnoreCase()
Ele permite comparar Strings ignorando diferenças entre letras maiúsculas e minúsculas.
Por exemplo:
String codigo = "BANCO01";
if (codigo.equalsIgnoreCase("banco01")) {
System.out.println("Iguais");
}
Nesse caso, o resultado será:
Iguais
Mas é importante não usar equalsIgnoreCase() quando o exercício exige uma comparação exata.
O que aprendi com esses desafios?
O mais interessante desses exercícios foi perceber que desafios simples podem ensinar conceitos fundamentais.
No começo, podemos pensar:
"É só comparar duas palavras."
Mas por trás disso estamos praticando:
Entrada de dados com Scanner;
Variáveis do tipo String;
Comparação de textos;
equals();
Diferença entre equals() e ==;
if e else;
Operadores lógicos como ||;
Sensibilidade a maiúsculas e minúsculas.
Esses conceitos aparecem constantemente em programas maiores.
Conclusão
Para quem está começando Java, minha principal dica depois desses exercícios é: não passe pelos desafios apenas tentando fazer o código funcionar.
Tente entender por que determinada solução funciona.
No meu caso, um exercício simples de validação de códigos acabou ajudando a entender melhor uma diferença importante da linguagem:
string1.equals(string2)
é utilizado para comparar o conteúdo de Strings.
Já:
string1 == string2
não deve ser usado como regra geral para verificar se duas Strings possuem o mesmo conteúdo.
É um detalhe pequeno, mas entender esses fundamentos desde o início evita muitos problemas no futuro.
E você, quando começou a estudar Java, também teve dúvida entre equals() e ==?
Compartilhe sua experiência nos comentários. Pode ser que a sua dúvida ou explicação ajude outro iniciante que esteja passando pelo mesmo desafio.


