Igualdade em java - métodos equals() e hashCode()

1 resposta
L

Vejam, por favor, o código abaixo:

import java.util.Date;
public class EqualsHashCode {

    public static void main(String[] args) {
            Integer i1 = new Integer(20);
            Integer i2 = new Integer(20);
        if(i1.equals(i2)&&(i1.hashCode()==i2.hashCode()))
            System.out.println("métodos sobrescritos para wrappers");

            String s1 = "Roberto";
            String s2 = new String("Roberto");
         if(s1.equals(s2)&&(s1.hashCode()==s2.hashCode()))
            System.out.println("Métodos sobrescritos para String");
            Date d1 = new Date();
            Date d2 = new Date();

        if(d1.equals(d2)&&(d1.hashCode()==d2.hashCode()))
                System.out.println("Métodos sobrescritos para Date");

    }

}

Leiam, por favor, esta afirmação:
" Podemos notar que para as classes Date, String e wrappers, os métodos hashcode() equals() são sobrescritos. Isso nos permite determinar a igualdade entre objetos dessas classes.""

Pergunto:
-Porque os métodos são sobrescritos ? - Alguém aqui poderia me explicar ?

Lyra Machado

1 Resposta

J

Porque os métodos equals e hashCode da classe object, são baseados em seu endereço na memória…
ou seja, se você não sobrescrever estes métodos, sempre que chamá-los o resultado nunca será o mesmo, a não ser que seja o mesmo objeto na memória, dessa forma, as referências seriam idênticas. ((obj1 == obj2) == true). Mas quando sobrescrevemos estes métodos, utilizamos os atributos da classe que achamos relevantes para serem usados nestes métodos, dessa forma, mesmo que não sejam as mesmas referências ((obj1 == obj2) == false) os métodos equals e hashCode, teram os mesmos resultados.

espero ter ajudado…

[]'s

Criado 2 de agosto de 2009
Ultima resposta 2 de ago. de 2009
Respostas 1
Participantes 2