this e toString/equals/hashCode
Use this para referir-se ao objeto atual, escreva um toString útil e implemente equals e hashCode corretamente.
this e toString/equals/hashCode é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 3 aulas no total.
A palavra-chave this
this refere-se ao objeto atual. Use-a para acessar campos ou chamar outro construtor. Ela é útil quando os nomes dos parâmetros são iguais aos nomes dos campos, deixando clara a sua intenção.
toString legível
toString() retorna um resumo do objeto fácil de entender. Sobrescreva-o para exibir campos importantes, como identificador e nome. Isso torna os registros e as mensagens de depuração muito mais fáceis de compreender.
equals versus ==
equals verifica a igualdade lógica, enquanto == verifica se duas referências apontam para o mesmo objeto. A maioria das classes de domínio deve sobrescrever equals para comparar pelo conteúdo, não pelo endereço de memória.
hashCode corresponde a equals
hashCode deve ser consistente com equals: se a.equals(b) for verdadeiro, então a.hashCode() deverá ser igual a b.hashCode(). Essa regra é necessária para que HashSet e HashMap funcionem corretamente.
Dicas e armadilhas
Escolha campos estáveis para a igualdade, como identificador ou e-mail, e mantenha toString curto. Evite usar coleções mutáveis dentro de equals e hashCode. Quando tiver dúvidas, gere os métodos com seu ambiente de desenvolvimento e revise-os.
Código: this, equals e hashCode
A demonstração cria duas instâncias de Person com o mesmo conteúdo. equals retorna verdadeiro, os códigos hash coincidem e um HashSet consegue encontrar o segundo objeto.
public class Main {
// Simple Person class to demo this, toString, equals, hashCode
static class Person {
private int id;
private String name;
// Constructor uses this to set fields
Person(int id, String name) {
this.id = id; // this.id refers to the field
this.name = name; // name comes from the parameter
}
// Human friendly string
@Override
public String toString() {
return "Person{id=" + id + ", name=" + name + "}";
}
// Logical equality: same id and same name
@Override
public boolean equals(Object o) {
if (this == o) return true; // same reference
if (o == null || getClass() != o.getClass()) return false;
Person other = (Person) o;
if (this.id != other.id) return false;
// Compare names safely (null aware)
if (this.name == null) return other.name == null;
return this.name.equals(other.name);
}
// Hash code consistent with equals
@Override
public int hashCode() {
int result = Integer.hashCode(id);
result = 31 * result + (name == null ? 0 : name.hashCode());
return result;
}
}
public static void main(String[] args) {
// Create two persons with the same content
Person a = new Person(1, "Ada");
Person b = new Person(1, "Ada");
// toString shows readable info
System.out.println(a);
// equals compares content, not memory address
System.out.println("a == b ? " + (a == b)); // false (different objects)
System.out.println("a.equals(b) ? " + a.equals(b)); // true (same content)
// hashCode must match for equal objects (useful in hash collections)
System.out.println("hash(a) = " + a.hashCode());
System.out.println("hash(b) = " + b.hashCode());
// Example with HashSet: contains works because equals and hashCode agree
java.util.Set<Person> set = new java.util.HashSet<>();
set.add(a);
System.out.println("set contains b ? " + set.contains(b)); // true
}
}
Verificação do contrato
Verificação rápida: se você sobrescrever equals, o que mais deverá fazer e por quê?
Revisão
Revisão: this esclarece o acesso aos campos, toString ajuda na depuração, equals compara o conteúdo e hashCode mantém as coleções consistentes.
Perguntas Frequentes
A aula “this e toString/equals/hashCode” é grátis?
Sim — o texto completo de “this e toString/equals/hashCode” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 3 aulas no total.
O que vou aprender em “this e toString/equals/hashCode”?
Use this para referir-se ao objeto atual, escreva um toString útil e implemente equals e hashCode corretamente. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 3.
Quanto tempo leva a aula “this e toString/equals/hashCode”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- this e toString/equals/hashCode
- Composição de objetos
- Modelagem de um domínio (UML→código)