0Pricing
Java Academy · Aula

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

  1. this e toString/equals/hashCode
  2. Composição de objetos
  3. Modelagem de um domínio (UML→código)
← Voltar para Java Academy