Comparar Objeto (valor)?

5 respostas
P

Folks,

porque na comparação a.equals(b) retorna falso não estou comparando o valor
do obejto e não são iguais ???

class CompareRef{
	public static void main(String [] args){
	Button a = new Button("exit");
	//aqui eh outro objeto no heap com o mesmo valor do objt a
	Button b = new Button("exit");
	Button c=a;//aqui referencia ao mesmo objeto
	System.out.println("is referece a == b? " + (a.equals(b)));//false
	System.out.println("is referece a == c? " + (a==c));//true
	}
}

resultado

is referece a == b? false
is referece a == c? true

5 Respostas

L

Seu objeto é de uma classe que implementa boolean equals(Object) ou int hashCode()? Se não, dois objetos não são iguais (mesmo com equals) se forem instâncias diferentes com o mesmos atributos.

A definição de semelhança entre objetos é específico às regras que você define, não se pode esperar que o Java decida isso sozinho.

RealJavaMan

Os objetos não são iguais.
São instâncias de uma mesma classe JButton e possuem atributos com valores iguais, mas ainda assim são objetos distintos, ocupam áreas de memória separadas.
O método equals funciona assim mesmo.

Andre_Fonseca

Oi,

Porque a=c mas a != b

[]´s

rodrigo_gomes

André Fonseca:
Oi,

Porque a=c mas a != b

[]´s

Exato. E pelo que vi aqui nos fontes que o Ecplise mostra, nem o JButton, nem nenhuma outra
classe da arvore implementa o equels/hashCode…então tá usando o do Object mesmo, só compara referencia.

Att,

KrinosX

http://www.guj.com.br/posts/list/99824.java#538082

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