> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud4-elementos-da-programacion-orientada-a-obxectos/a-clase-object/equals-object-o.md).

# equals(Object o)

O método `equals(Object)`<i class="fa-copy">:copy:</i> compara dous obxectos e decide se son iguais, devolvendo `true` en caso afirmativo e `false` en caso contrario. É importante destacar que o operador **`==`** é válido para comparar tipos primitivos, pero **non serve para comparar obxectos**, xa que só examina as súas referencias sen fixarse no contido:

```java
Persoa a = new Persoa("Manu",8,1.7);
Persoa b = new Persoa("Manu",8,1.7);
a == b // Isto é falso
```

Os dous obxectos ocupan lugares distintos de memoria, por iso a referencia non é igual.

Vamos a implantar `equals(Onject)`<i class="fa-copy">:copy:</i> para a clase `Persoa`<i class="fa-copy">:copy:</i>. Temos que decidir que significa que dúas persoas sexan iguales. Por exemplo, consideramos neste caso só son iguais se teñen o mesmo nome e idade:

```java
@Override
public boolean equals(Object outraPersoa) {
    //Lanza excepcion si el objeto no es de la jerarquía de Object
    Persoa outra = (Persoa) outraPersoa; // necesitamos realizar un cast
    if(this.nome.equals(outra.getNome()) && this.idade == outra.getIdade()){
        return true;
    }
    return false;
}
```

A maioría de clases da API teñen a súa propia implantación de `equals(Object)`<i class="fa-copy">:copy:</i>.

Dentro do noso exemplo concreto con direccións, persoas e estudiantes, o método equals quedaría da seguinte forma:

```java
public class Direccion {
...
@Override
    public boolean equals(Object o) {
        //if (getClass() != o.getClass()) return false; // No tiene en cuenta jerarquías
        if (!(o instanceof Direcion)) 
            return false;  // Cierto, si o es un objeto del mismo tipo o subclase
        Direcion otra = (Direcion) o;
        return this.numero == otra.getNumero() && 
                this.calle.equals(otra.getCalle()) && 
                this.localidad.equals(otra.getLocalidad());
    }
}
```

## Composición

Igual que nos casos dos outros métodos, o obxecto interno debe de ser capaz de compararse a si mesmo con outros obxectos iguais, para co cal chamaremos ao seu propio método equals.

```java
public class Persona {
 ....
    @Override
    public boolean equals(Object o) {
        if (!(o instanceof Persona)) 
            return false;
        Persona persona = (Persona) o;
        return this.nombre.equals(persona.getNombre()) &&
                this.getDirecion().equals(persona.getDirecion()) &&
                this.getPeso() == persona.getPeso();
    }
}
```

## Herdanza

Dentro da Herdanza, podemos empregar o método

```java
public class Estudiante extends Persona {

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof Estudiante)) 
            return false;
        if (!super.equals(o)) 
            return false;
        Estudiante that = (Estudiante) o;
        return this.getTitulacion().equals(that.getTitulacion());
    }

}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud4-elementos-da-programacion-orientada-a-obxectos/a-clase-object/equals-object-o.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
