0Pricing
Java Academy · Lección

this y toString/equals/hashCode

Use this para referirse al objeto actual, escriba un toString útil e implemente equals y hashCode correctamente.

this y toString/equals/hashCode es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 3 lecciones en total.

La palabra clave this

this hace referencia al objeto actual. Úsela para acceder a los campos o llamar a otro constructor. Resulta útil cuando los nombres de los parámetros coinciden con los nombres de los campos, ya que deja clara su intención.

toString legible

toString() devuelve un resumen fácil de entender de un objeto. Sobrescríbalo para mostrar campos importantes, como id y name. Esto facilita mucho la comprensión de los registros y las impresiones de depuración.

equals frente a ==

equals comprueba la igualdad lógica, mientras que == comprueba si dos referencias apuntan al mismo objeto. La mayoría de las clases de dominio deberían sobrescribir equals para comparar el contenido, no la dirección de memoria.

hashCode coincide con equals

hashCode debe ser coherente con equals: si a.equals(b) es true, entonces a.hashCode() debe ser igual a b.hashCode(). Esta regla es necesaria para que HashSet y HashMap funcionen correctamente.

Consejos y errores frecuentes

Elija campos estables para la igualdad, como id o email, y mantenga toString breve. Evite usar colecciones mutables dentro de equals y hashCode. Si no está seguro, genere los métodos con su IDE y revíselos.

Código: this, equals, hashCode

La demostración crea dos personas con el mismo contenido. equals devuelve true, los códigos hash coinciden y un HashSet puede encontrar el 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
  }
}

Comprobación del contrato

Comprobación rápida: Si sobrescribe equals, ¿qué más debería hacer y por qué?

Repaso

Repaso: this aclara el acceso a los campos, toString facilita la depuración, equals compara el contenido y hashCode mantiene la coherencia de las colecciones.

Preguntas frecuentes

¿La lección «this y toString/equals/hashCode» es gratis?

Sí — el texto completo de «this y toString/equals/hashCode» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 3 lecciones en total.

¿Qué aprenderé en «this y toString/equals/hashCode»?

Use this para referirse al objeto actual, escriba un toString útil e implemente equals y hashCode correctamente. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.

¿Cuánto tiempo toma la lección «this y toString/equals/hashCode»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. this y toString/equals/hashCode
  2. Composición de objetos
  3. Modelado de un dominio (UML→código)
← Volver a Java Academy