Métodos hashcode() e equals  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Pessoal, eu estava analisando um código e me deparei com o método:

e esse outro que me parece ter relação com um primeiro, pesquisando eu descobri que saum métodos herdados da class Object:

Alguém poderia me dar uma ajuda sobre o funcionamento desses métodos?
Valeu

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
fabiofeber
Entusiasta Java

Membro desde: 10/04/2005 23:39:26
Mensagens: 18
Offline


ZehOliveira
GUJ Ranger

Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline

O equals é um método que compara se um objeto é igual a outro. Se você não sobrescrever, é usada a implementação padrão de Object, que é "um objeto é igual a outro caso seja a mesma instância na memória". Caso precise de uma comparação mais detalhada, você deve sobrescrever o método a seu modo (por exemplo, dois objetos pessoas são iguais se tiverem o mesmo cpf). Lembrando que a relação de igualdade deve ser reflexiva, simétrica e transitiva.

O hashCode é um método que retorna um código hash de um objeto. Sempre que sobrescrever o equals, sobrescreva também o hashCode. Ele é usado normalmente para agilar a busca em collections.

This message was edited 1 time. Last update was at 26/03/2009 12:00:31

felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Olá Fabio e José,

Obrigado pela ajuda, uma duvida que eu tive quanto ao codigo que eu estava analisando é pq Devel naum era uma classe e sim uma interface, ou seja, a gente naum instancia a interface, por isso fiquei meio confuso com o instanceof, quanto ao hashcode, ficou mais esclarecido, mas ainda naum tenho clareza quanto a relação entre os dois, José, vou ler o seu artigo,
Grato,
Samuel

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
Dil14
Thread.start()
[Avatar]

Membro desde: 20/09/2008 17:46:42
Mensagens: 26
Offline

Pessoal, tenho dúvidas também em relação ao método equals, alguém poderia me dar um exemplo de como fazer uma comparação entre dois valores inteiros de Arrays distintos, utilizando esse método?



Abraço

Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 25204
Localização: Curitiba/PR
Offline

ZehOliveira wrote:O hashCode é um método que retorna um código hash de um objeto. Sempre que sobrescrever o equals, sobrescreva também o hashCode. Ele é usado normalmente para agilar a busca em collections.


Só complementando, essa obrigação existe porque a função de hashcode deve retornar valores iguais para objetos iguais (é para isso que ela serve).
Ou seja se:


Então


Note que o contrário pode não ser verdadeiro. Dois objetos de hashCode iguais não necessariamente são iguais, embora, numa boa função de hash isso será muito provável.


Quanto ao equals... testar com instanceOf pode quebrar uma das premissas do equals que diz:


Portanto, isso recai numa implementação errada. Deixo como lição de casa para você achar um caso onde usando instanceof essa propriedade não valha.

@ViniGodoy - Lattes

Novo no fórum? Leia nosso How to.

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Dil14
Thread.start()
[Avatar]

Membro desde: 20/09/2008 17:46:42
Mensagens: 26
Offline

Lavieri wrote:


Só isso Lavieri?!

Fico ateh envergonhado.

Brigado,

Vlw!
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

valores primitivos são testado via == ... ou seja... boolean, int, double, long, char, short ... etc ...


Objetos que precisam ser testaod via equals

Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Dil14
Thread.start()
[Avatar]

Membro desde: 20/09/2008 17:46:42
Mensagens: 26
Offline

Lavieri wrote:valores primitivos são testado via == ... ou seja... boolean, int, double, long, char, short ... etc ...


Objetos que precisam ser testaod via equals


Claro, claro - eh pq eu tava c a ideia do objeto Array na cabeça, q acabei me esquecendo dos tipos primitivos.

Vlw!
wilson_sm
What is classpath?

Membro desde: 22/01/2010 12:13:28
Mensagens: 5
Localização: São Paulo
Offline

será que posso colocar mais uma dúvida aqui?
no caso eu estou fazendo comparações entre dois objetos:

eu sei que a comparação == entre os dois objetos não terá validade, acredito que teria que utilizar o método .equals

porém fazendo dessa forma, não consigo o retorno true.

Sei também que se fizer assim:

o objeto conta2 é a mesma posição de conta1, e por isso q retorna valor true.

agora que vem a questão: Qual a forma de comparar 2 objetos por completo?
[MSN]
regis_hideki
JavaGuru
[Avatar]

Membro desde: 29/03/2010 19:22:50
Mensagens: 220
Offline

Se você quiser que duas contas sejam consideradas iguais se possuem mesmo dono e mesmo saldo (acho que o mais correto seria verificar pelo número da conta + número da agência + nome do banco), basta fazer um método que verifique essas condições, ou sobrescreva o equals.
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1704
Localização: São Paulo
Offline

http://blog.caelum.com.br/ensinando-que-e-o-hashcode/

Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi



?The creation of genuinely new software has far more in
common with developing a new theory of physics than
it does with producing cars or watches on an assembly
line



<UnTouChAbLe>
[Email] [WWW] [MSN]
andrestrindade
JavaTeenager
[Avatar]

Membro desde: 01/09/2008 14:06:23
Mensagens: 157
Offline

Esse post do do linkhttp://blog.caelum.com.br/ensinando-que-e-o-hashcode/ ... Está com uma péssima didática.
Parece que tem gente que faz artigos/tutoriais pra quem já sabe!

Pouco conhecimento faz com que as pessoas se sintam orgulhosas. Muito conhecimento, que se sintam humildes. É assim que as espigas sem grãos erguem desdenhosamente a cabeça para o Céu, enquanto que as cheias as baixam para a terra, sua mãe.
Leonardo da Vinci

Ensinar não é transferir conhecimento, mas criar as possibilidades para a sua própria produção ou a sua construção.
Paulo Freire


Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância.
John F. Kennedy
david.javaman@gmail.com
What is classpath?

Membro desde: 21/08/2010 16:27:45
Mensagens: 8
Offline

andrestrindade wrote:Esse post do do linkhttp://blog.caelum.com.br/ensinando-que-e-o-hashcode/ ... Está com uma péssima didática.
Parece que tem gente que faz artigos/tutoriais pra quem já sabe!


Ola pessoal segue um post que explica em datalhes o metodo equals no blog Cursaki

http://cursaki.blogspot.com.br/2012/05/o-metodo-equals.html
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team