Comparación de objetos en Java

Hola a todos, hoy os explicare como comparar objetos de nuestras clases en Java.

Por defecto, al crear un objeto tenemos un método llamado equals que viene de la clase java.lang.Object (es heredada por defecto de todas las clases que creamos).

Cuando comparamos dos objectos, por este método heredado, determina si la dirección de los objetos es igual. Por ejemplo:

¿Podríamos definir nosotros este método indicando que se debe cumplir para que sean iguales? La respuesta es sí, podemos sobrescribir este método, como ya vimos en su momento. La definición del método es:

public boolean equals (objeto_clase a)

Supongamos que para que un empleado sea igual que otro tenga el nombre y apellido igual. Veamos como se implementaría el método equals en la clase Empleado.

Ahora comprobamos que funciona el método.

Hasta ahora, hemos visto que debemos hacer para que comprobar que dos objetos sean iguales.

También podemos indicar si un objeto es mayor o menor que otro, por ejemplo, si un empleado tiene mas años que otro, indicaremos que es mayor.

Para ello usaremos el método compareTo (es parecido al método de String de Java), implementaremos la interfaz Comparable. Veamos como se hace:

Como vemos, usamos para implementar esta interfaz, es porque esta parametrizada, esto lo explicaremos con mas detalle más adelante.

Ahora nos obligara a implementar el método compareTo, esta es su definición:

Implementaremos el método según como queramos determinar que un objeto es mayor que otro. Así queda:

Veamos un ejemplo practico:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

5 comentarios

  1. ppsmillenium

    Hola,
    está muy bien explicado, enhorabuena. Sin embargo veo que desde Java 7 se obliga a sobrescribir el método equals con lo que, si como en el ejemplo, creamos un objeto p de Persona no lo estamos haciendo y eso puede derivar en problemas posteriores (no es lo recomendado)

    Según la nueva nomenclatura hay que usar (Object obj) en vez de (Persona p) y luego castear object a la clase Persona para que la tome como referencia.

    Persona p = (Persona) obj

    Es sólo un apunte, gracias por el contenido.

  2. paul

    public boolean equals (Empleado a){

    if(a.getNombre().equals(nombre) && a.getApellido().equals(apellido)){
    return true;
    }else{
    return false;
    }
    }

    Esta parte me marca errónea net beans –> a.getNombre().equals(nombre) && a.getApellido().equals(apellido)

    No puedes llamar desde el parámetro «a ,a un método get y también llamar al método equals. No se si me explico.
    Como solución seria usar un operador de igualdad y no equals.
    a.getNombre()==nombre && a.getApellido().==apellido

  3. Luis angel

    Necesito hacer un programa capaz de comparar dos libros y mostrar el que tenga mayor numero de paginas. Teniendo en cuenta que tendremos dos clases (clase libros, clase main para ejecutar). tres atributos (string autor, titulo y como int paginas).

  4. e

    ¿Como podría hacerlo sin el ArrayList?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


Warning: Trying to access array offset on value of type null in /home2/discodur/public_html/discoduroderoer/wp-content/themes/disto/single.php on line 539