Dúvida estúpida quase besta

7 respostas
L

Olá a todos…

Estava eu em meus estudos através de uma apostila do curso de certificação Java Programmer da própria Sun , me deparei com a seguinte dúvida.

Empregado emp1 = new Empregado(“Michelle”,“5656-6598”,22);
Empregado emp = new Empregado(“Michelle”,“5656-6598”,22);

System.out.println(emp1.equals(emp));

O que isso imprimi e pq ?

Obrigado ,

7 Respostas

cv1

Vai depender da implementacao da classe Empregado. O que tem nela?

N

“equals” é um método de comparação entre objetos, como você tem duas instâncias diferentes, “equals” irá retornar “false” pela implementação default (nao tenho certeza).

A forma correta de utilizar “equals” no seu projeto seria sobrescrever esse método na sua classe “Empregado” para comparar seus objetos atributo a atributo, e retornar verdadeiro se duas instâncias diferentes possuem atributos iguais.

Algo como:

public class Empregado {
   ...
   public boolean equals(Object obj) {
      Empregado outro = (Empregado) obj;

      // supondo att1 objeto, att2 objeto, att2 tipo nativo (int, boolean, float, etc)
      return outro.att1.equais(att1) && outro.att2.equals(att2) && (outro.att3 == att3)
   }
   ...
}

boa sorte

Rafael_Afonso

Olá:

Lembre-se de quando sobrescrever equals() sobrescrever também hashCode(). Dê uma olhada neste texto.

Grato,

N

Excelente texto Rafael, boa dica.

:slight_smile:

L

Então mesmo sendo a mesma classe e tendo os mesmos valores para suas variáveis de instância , o equals retorna false…?

Resumindo…nesse caso quando o equals retornaria true?

Rafael_Afonso

Quem decide isso é você. Você pode compara os atributos de sua classe um por um (como o net_sandro demonstrou em seu primeiro post), pode comparar apenas os nomes ou apenas verificar se os objetos são iguais:

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

Você, como programador, deve decidir quando dois objetos serão “iguais”.

Grato,

N

Como eu falei, e o Rafael completou, o “equals” é somente um método de comparação “igualdade”, você define o seu critério de igualdade entre seus objetos. Igualdade é um critério conceitual.

Em geral, o critério que se deveria identificar dois objetos como iguais seria: todos os atributos iguais. Mas, isso é uma visão genérica. Você pode ter uma visão conceitualmente diferente.

Se para o seu código, duas instâncias de objetos que possuem um único atributo X iguais devem ser interpretados como “objetos iguais”, então, você implementa o seu “equals” para que atenda a esse requisito testando apenas o atributo X das duas igualdades.

Algo como:

....
public boolean equals(Object obj) {
   return (this.X == obj.X)
}
...
Criado 3 de janeiro de 2004
Ultima resposta 5 de jan. de 2004
Respostas 7
Participantes 4