Object.equals

6 respostas
Polimorphism

Olá pessoal. To com uma dúvida. Em todos os lugares se diz que quando se for comparar objectos se deve usar .equals( Object ) ao invés do operador “==”.
Hj me deu curiosidade e resolvi olhar como o método equals é implementado, e fiquei surpreso ao achar:

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

Pensei que ele comparava os campos! =)
Vlw a todos []`s

6 Respostas

fabiopagoti

chutaria que ele compara o endereço de memoria referenciada dos objetos.

L

Polimorphism, você olhou o equals do classe Object, se você olhar o da classe String, verá que ele foi reescrito.

guedes

Olá Polimorphism,

por isso que em classes que criadas por você o ideal é sempre sobrescrever o método equals, porque se não vai usar o equals da classe Object, que iria comparar a instancia das classes, que por sua vez poderia não gerar o resultado esperado.

Lembrando que ao sobrescrever o método equals o ideal é também sobrescrever o método hashCode para que objetos iguais tenha códigos hash iguais.

[]'s

ViniGodoy

Já notei que você é ligado em boas práticas.
Procure obter e ler o livro Effective Java. Tenho certeza que será um prato cheio para você. :wink:

(Aliás, essa deveria ser leitura obrigatória para todo programador Java)

tinorberto

Oi Polimorphism, de uma na estrutura do Object , elke não tem campos , apenas metodos , logo seria impossivel fazer a comparação utilizando os campos . Isso e utilizado pois sempre que criamos um object hedanos a classe Object . Na classe que vc criou que tem os campos , na classe Object tem apenas os metodos… flw

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#Object()

Polimorphism

ViniGodoy:
Já notei que você é ligado em boas práticas.
Procure obter e ler o livro Effective Java. Tenho certeza que será um prato cheio para você. :wink:

(Aliás, essa deveria ser leitura obrigatória para todo programador Java)

Ok, vou ver se acho :slight_smile:

quedes:
Olá Polimorphism,

por isso que em classes que criadas por você o ideal é sempre sobrescrever o método equals, porque se não vai usar o equals da classe Object, que iria comparar a instancia das classes, que por sua vez poderia não gerar o resultado esperado.

Lembrando que ao sobrescrever o método equals o ideal é também sobrescrever o método hashCode para que objetos iguais tenha códigos hash iguais.

[]'s

Estranho =!, Nunca sobrescrevi o método equals e ele sempre me retorna certo ( Acho eu )

E eu que tinha quase jurado que ia achar um native ou alguma coisa assim ^^
Obrigado vou pesquisar um pouco. :slight_smile:

Criado 20 de setembro de 2009
Ultima resposta 21 de set. de 2009
Respostas 6
Participantes 6