equals em Java
Compare texto String com equals para que palavras iguais imprimam true. Em Yard.java, monte String a = "red"; e String b = "red";, depois imprima a.equals(b). Acrescente String c = "blue"; e imprima a.equals(c). Compile com javac Yard.java e rode java Yard. A tela deve mostrar true, depois false. Uma segunda demo monta dois objetos new String("red") para que == possa imprimir false enquanto equals ainda imprime true. Deixe debugging para a pagina seguinte — esta licao e correspondencia de conteudo versus identidade de objeto.
Combine texto com equals
A pagina de polymorphism rodou corpos horn diferentes por variaveis tipadas Machine. Esta pagina compara texto. Abra Yard.java. Mantenha o nome da classe publica Yard. Apague demos sobrando de Machine / Truck / Car se enterrarem a historia de string, fills abstract sobrando, demos de caminho e qualquer Scanner de teclado. O programa nao deve esperar digitacao. Nenhuma linha import e necessaria nestas demos.
Dentro de Yard.main, monte tres strings:
String a = "red";
String b = "red";
String c = "blue";
Imprima as comparacoes:
System.out.println(a.equals(b));
System.out.println(a.equals(c));
O metodo equals olha os caracteres. Texto igual devolve true. Texto diferente devolve false.
public class Yard {
public static void main(String[] args) {
String a = "red";
String b = "red";
String c = "blue";
System.out.println(a.equals(b));
System.out.println(a.equals(c));
}
}
Da pasta que guarda Yard.java, rode javac Yard.java. Quando parenteses, chaves e ponto e virgula baterem, javac nao escreve linha propria. Depois rode java Yard — nao java Yard.java. Tire o final .java do comando de execucao. Mantenha uma classe publica no arquivo para o nome bater com Yard.
A tela mostra true, depois false. Percorra a execucao uma vez. Java comeca em Yard.main. a.equals(b) compara red com red e imprime true. a.equals(c) compara red com blue e imprime false. Voce chamou um metodo em a e passou a outra string como argumento.
Se ainda vir tone / honk / beep de um arquivo de polymorphism, mude para o arquivo de ensino de equals e rode java Yard de novo. Se imprimir as proprias strings em vez dos resultados de equals, vera red e blue na tela — envolva a.equals(b) dentro de println para o boolean aparecer.
Diga a regra em voz alta enquanto olha a tela: equals pergunta se o texto combina caractere a caractere. Nao invente uma janela de debugger nesta pagina. Debugging espera a proxima licao.
Contraste == com equals em new String
Um segundo programa monta dois objetos String separados com new. Ambos guardam o texto red. O programa imprime a == b e depois a.equals(b).
public class Yard {
public static void main(String[] args) {
String a = new String("red");
String b = new String("red");
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
Compile com javac Yard.java, depois rode java Yard. A tela mostra false, depois true. A checagem == pergunta se a e b sao exatamente o mesmo objeto na memoria. Duas chamadas new String("red") montam dois objetos, entao == imprime false. A checagem equals ainda olha os caracteres, entao imprime true.
Leia as duas linhas em main mais uma vez. Primeira linha: identidade com ==. Segunda linha: conteudo com equals. Mantenha ambos os prints neste formato de ensino para o contraste ficar numa so tela. Se so imprimir ==, perde a correspondencia de conteudo que esta pagina tambem ensina.
Em literais iniciantes como "red" sem new, Java pode reusar o mesmo objeto pooled, entao == as vezes parece true por acidente. Esta segunda demo usa new String("red") de proposito para a checagem de identidade ficar claramente false enquanto o conteudo fica true. Prefira equals quando voce se importa com o texto.
Se demos de polymorphism ainda ficarem por perto, guarde-as como historia. Para esta licao rode o arquivo de ensino de equals para a tela mostrar booleans, nao palavras horn. Se javac reclamar de classes publicas duplicadas, mantenha so Yard public.
Comparado com chamadas de polymorphism
Na pagina de polymorphism, um nome de metodo rodou corpos diferentes por variaveis tipadas do pai. Nesta pagina, um nome de metodo — equals — responde se duas strings guardam o mesmo texto, e == responde se sao o mesmo objeto. Voce ainda compila Yard.java e roda java Yard. Os tokens novos sao equals, os prints boolean true / false, e o contraste == com new String.
Se um arquivo Machine t = new Truck() ainda estiver aberto, voce vera chamadas horn. Mude para o arquivo equals para que main monte strings e imprima resultados de comparacao. Mantenha demos de ferramenta de debugging fora desta pagina. Mantenha entrada de teclado fora desta pagina.
O que isto deixa para debugging
Esta pagina compara conteudo de string e mostra por que == e o padrao errado para texto. A pagina seguinte mostra debugging, onde voce descobre por que um programa se comporta mal com leituras cuidadosas da tela e do codigo-fonte. Fique com equals e == aqui. Ainda nao exija um walkthrough completo de debugger.
Quando depois voce depurar um ramo errado, uma falha de equals e causa comum. Trate esta pagina como a metade de comparacao daquela historia vizinha. Termine ambas as demos Yard ate true / false e false / true parecerem automaticos antes de abrir a licao de debugging.
Antes de debugging
Voce pode chamar a.equals(b) em texto red combinando e ver true, depois ver false para blue. Voce pode montar dois objetos new String("red") e ver == imprimir false enquanto equals imprime true. Compile Yard.java e rode java Yard para cada demo mantida por vez. Correspondencia de conteudo e identidade de objeto ficaram separadas. A pagina seguinte e debugging, onde voce caca erros com a tela e o codigo-fonte lado a lado.
Mantenha a demo de tres strings com equals para uma checagem clara de conteudo. Mantenha a demo new String para um contraste claro de ==. Mantenha arquivos de debugging fora desta pagina. Esses tres habitos sao o checkpoint antes de seguir. Quando equals imprime true para texto combinando — e quando == imprime false para dois objetos novos com esse texto — esta licao fez o trabalho e voce esta pronto para o proximo topico sobre debugging.
Uma ultima passagem pela pasta: um Yard public, comparacoes de string em main, sem espera de teclado, sem debugger forcado. Rode javac Yard.java e java Yard mais uma vez na demo que voce mantem aberta. Se a tela ainda imprimir os booleans que voce espera, a historia de comparacao esta solida e o curso pode ir para debugging na pagina seguinte.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo