Encontrei esta questão em um teste e gostaria de compartilhá-la com vocês. A questão é a seguinte: Existem duas variáveis de string x e y. Quando if (x.equals(y) == true), as duas strings existem. ? Diferentes implementações de código hash, o julgamento está correto? Resposta: Errado, eles têm o mesmo valor de código Hash. Análise: Esta questão examina principalmente o método de acesso dos objetos String. Primeiro, devemos esclarecer qual é o valor do código hash da variável String. O estado do objeto String armazenado na memória é armazenado na tabela hash. Quando strings diferentes são geradas, elas corresponderão a um código hash. O código hash da string é obtido através do método hashCode(), que retorna o hash. da string. O código é do tipo int. O código hash de um objeto String é calculado de acordo com a seguinte fórmula: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] Nota: Use o algoritmo int, onde s[i] é o i-ésimo caractere da string, n é o comprimento da string e ^ significa exponenciação. (O valor hash de uma string vazia é 0.) O método hashCode() em dados do tipo String herda o método hashCode() na classe Object e seu objetivo principal é melhorar o desempenho da tabela hash (java.util.Hashtable). . Otimize a eficiência do acesso. Quando duas strings de declaração idênticas aparecem, uma nova instância de objeto não será recriada, mas o código hash existente será retornado e passado para a referência correspondente. Vamos apresentar o acordo geral de HashCode, que é aproximadamente o seguinte: Durante a execução de uma aplicação Java, quando o método hashCode é chamado duas vezes no mesmo objeto, o mesmo número inteiro deve ser retornado de forma consistente, desde que as informações usadas na comparação do objeto igual não foi modificado. Este número inteiro não precisa permanecer o mesmo de uma execução de um aplicativo para outra execução do mesmo aplicativo. Se dois objetos são iguais de acordo com o método equals(Object), (nota: esta questão é um exemplo típico), então o mesmo número inteiro deve ser gerado quando o método hashCode() for chamado no resultado de cada um dos dois objetos. Se os dois objetos não forem iguais de acordo com o método equals(java.lang.Object), chamar o método hashCode() em qualquer um dos objetos não gerará necessariamente resultados inteiros diferentes. No entanto, em aplicações práticas, gerar resultados inteiros diferentes para objetos diferentes pode melhorar o desempenho das tabelas hash.
Este artigo vem do blog CSDN. Indique a fonte ao reimprimir: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx .
-