La mentira de java

Buenas lectores, si ya estáis acostumbrados a usar java sabréis que Object incluye dos métodos muy interesantes, equals y clone, pues bien, no son lo que parecen a simple vista.

equals, que recibe un objecto y lo compara con el objeto sobre el que se aplica devuelve true si los dos son iguales, false si no. Por eso hay que usarlo en vez de el famoso == ya que este último compara que los punteros son el mismo, y no el objeto. Sin embargo la implementación de equals es la siguiente.

public boolean equals(Object obj) {
        return (this == obj);
}

Si, usa el doble igual, así que equals si no lo reimplementamos no funcionará con nuestras propias clases, ocurriendo cosas como esta.

La otra perla es clone, que se supone que devuelve un objeto idético al objeto sobre el que se aplica, ahora bien, esta es la realidad.

protected native Object clone() throws CloneNotSupportedException;

Vamos, que está como podía no estarlo. Para empezar ni siquiera hace algo y después lanza una excepción. En la propia documentación dice que

     *The method {@code clone} for class {@code Object} performs a
     * specific cloning operation. First, if the class of this object does
     * not implement the interface {@code Cloneable}, then a
     * {@code CloneNotSupportedException} is thrown.

Así que si quieres que tu objeto se pueda clonar, no olvides implementar la interfaz Cloneable, que digo yo, para que pone clone en Object si necesitabas una interfaz pero bueno, es lo que hay. Tenedlo en cuenta cuando programéis en java.

Nos vemos en el siguiente artículo.

 

Una respuesta a “La mentira de java”

  1. Y asi es como Java consigue dejarme perplejo
    Aun asi, no entiendo porque con .equals() funciona algo que con == no cuando por dentro es similar, y si no es asi.. Como implementamos .equals() ??

Deja un comentario

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