COmparar Objeto

4 respostas
P

Folks,

como faço pra testar os dois objetos abaixo e nessa situação o

retorno for true…

O que quero testar dois objetos e não usar equals tem outra forma ???
se alguém puder me ajudar …

abs

Integer i = new Integer(5);
	
Integer k = new Integer(5);
	
	System.out.println(i==k);//false

4 Respostas

malves_info

Porque não usar: i.getID().equals(k.getID()); ???

EduLipe

implemente na classe a interface comparable

o “==” compara apenas a referencia em memoria e não os objetos.

eberson_oliveira

Olá,

Integer i = new Integer(5);  
          
   Integer k = new Integer(5);  
          
   System.out.println(i==k); //false, pois a comparação foi feita com as instâncias dos objetos e não com seus valores.

Pra poder fazer a comparação com (==) que vc quer (usando o valor) é necessário fazer algo do tipo

System.out.println( i.intValue() == k.intValue() );

A comparação (==) onde se compara o valor só funciona com tipos primitivos.

Espero ter ajudado.

[]s

KrinosX

Olha.. o "==" funciona para comparar tipos primitivos e referências (como nosso amigo disse acima).

Para você fazer comparação de objetos ( qualquer tipo de objeto) voce tem que usar o método EQUALS

por exemplo
Objeto a = new Objeto();

Objeto b = new Objeto();


if(a.equals(b)){
 // do somehting
}

Para o método equals funcionar, no entanto, você precisa sobrescrever o método HashCode (esse método vem de Object, então todos os objetos podem sobrescreve-lo). Esse método, se não me falha a memória, retorna um "int". Esse int deve ser computado atravéz de um algoritimo seu. O seu trabalho vai ser desenvolver um algorítimo que garanta que, sempre quando dois objetos estiverem preenchidos com os mesmo falores, esse inteiro retornado será o mesmo.

Se eu não me engano, quando o java tenta comparar duas referências de objetos, com o == ele também usa o método hashCode.... por exemplo...

// a == b

a.hashCode() == b.hashCode()

Esse eu já não garanto... mass.. quando usamos o método Equals, o java tem o seguinte comportamento

//a.equals(b)

if(a.hashCode() == b.hashCode()){
  return true;
} else {
  return false;
}

Essa abordagem, de implementar o hashcode é util quando você tem objetos do seu modelo de negócio que precisam ser comparadas constantemente.

O que você pode fazer também, mas eu não recomendo, é sobrescrever o método equals do seu objeto implementando um algoritmo próprio de comparação.... e por ai vai...

No caso de Integer.... tente usar o equals, acho que a classe integer já implementa o HashCode.

Caso contrario... faça o seguinte:
Integer a = new Integer(1);
Integer b = new Integer(1);


if( a.intValue() == b.intValue()){
 // do something
}

Valeu?

Se eu falei alguma besteira, por favor, alguem me corrija... estou meio inferrujado no que diz respeito a conceitos "de baixo nivel" hehehe

abraço

Criado 13 de agosto de 2008
Ultima resposta 13 de ago. de 2008
Respostas 4
Participantes 5