Diga que eu tenho minha própria aula
public class MyObj { /* ... */ }
Possui alguns atributos e métodos. NÃO implementa igual, NÃO implementa hashCode.
Depois de chamar equals e hashCode, quais são as implementações padrão? Da classe de objeto? E quais são eles? Como o padrão igual funcionará? Como o hashCode padrão funcionará e o que retornará? == irá apenas verificar se eles fazem referência ao mesmo objeto, então é fácil, mas e os métodos equals () e hashCode ()?
v6u23 ea
:public native int hashCode();
Existem implementações padrão de
equals()
ehashCode()
em Object. Se você não fornecer sua própria implementação, ela será usada. Poisequals()
, isso significa uma==
comparação: os objetos só serão iguais se forem exatamente o mesmo objeto. PoishashCode()
, o Javadoc tem uma boa explicação.Para obter mais informações, consulte Effective Java, Capítulo 3 (pdf), item 8.
fonte
Sim, da
Object
classe, já que sua classe estende Object implicitamente.equals
simplesmente retornathis == obj
.hashCode
a implementação é nativa. Apenas um palpite - ele retorna o ponteiro para o objeto.fonte
Se você não fornecer sua própria implementação, uma derivada de Object será usada. Está tudo bem, a menos que você planeje colocar suas instâncias de classe em, por exemplo, HashSet (qualquer coleção que realmente use hashCode ()), ou algo que precise verificar a igualdade do objeto (ou seja, o método contains () de HashSet). Caso contrário, funcionará incorretamente, se é isso que você está pedindo.
É muito fácil fornecer sua própria implementação desses métodos graças ao HashCodeBuilder e EqualsBuilder da Apache Commons Lang .
fonte
Foo
eBar
são referências a duas instâncias diferentes de um tipo mutável, e existe um método (por exemploSomeMutatingMethod
) queFoo.SomeMutatingMethod()
não afetaBar
da mesma forma que afetaFoo
, essa diferença deve ser suficiente para considerar os objetos como desiguais.A developerworks da IBM diz:
No entanto, para ter certeza dos detalhes exatos de implementação para a versão Java de um determinado fornecedor, é provavelmente melhor olhar como a fonte (se estiver disponível)
fonte