Encontré esta pregunta en una prueba y me gustaría compartirla con usted. La pregunta es la siguiente: Hay dos variables de cadena xey. Cuando if (x.equals(y) == true), ¿existen las dos cadenas? Diferentes implementaciones de código hash, ¿es correcto el juicio? Respuesta: Incorrecto, tienen el mismo valor de Código Hash. Análisis: esta pregunta examina principalmente el método de acceso de los objetos String. Primero, debemos aclarar cuál es el valor del código hash de la variable String. El estado del objeto String almacenado en la memoria se almacena en la tabla hash. Cuando se generan diferentes cadenas, corresponderán a un código hash. El código hash de la cadena se obtiene mediante el método hashCode (), que devuelve el hash. de la cadena. El código es de tipo int. El código hash de un objeto String se calcula según la siguiente fórmula: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] Nota: Utilice el algoritmo int, donde s[i] es el i-ésimo carácter de la cadena, n es la longitud de la cadena y ^ significa exponenciación. (El valor hash de una cadena vacía es 0.) El método hashCode() en datos de tipo String hereda el método hashCode() en la clase Object, y su objetivo principal es mejorar el rendimiento de la tabla hash (java.util.Hashtable). . Optimice la eficiencia del acceso Cuando aparecen dos cadenas de declaración idénticas, no se volverá a crear una nueva instancia de objeto, pero se devolverá el código hash existente y se pasará a la referencia correspondiente. Introduzcamos el acuerdo general de HashCode, que es aproximadamente el siguiente: durante la ejecución de una aplicación Java, cuando se llama al método hashCode en el mismo objeto dos veces, se debe devolver el mismo número entero de manera consistente, siempre que la información utilizada al comparar el objeto igual no ha sido modificado. No es necesario que este número entero permanezca igual de una ejecución de una aplicación a otra ejecución de la misma aplicación. Si dos objetos son iguales según el método igual (Objeto) (nota: esta pregunta es un ejemplo típico), entonces se debe generar el mismo número entero cuando se llama al método hashCode() en cada uno de los dos objetos. Si los dos objetos no son iguales según el método equals(java.lang.Object), llamar al método hashCode() en cualquiera de los objetos no necesariamente genera resultados enteros diferentes. Sin embargo, en aplicaciones prácticas, generar diferentes resultados enteros para diferentes objetos puede mejorar el rendimiento de las tablas hash.
Este artículo proviene del blog de CSDN. Indique la fuente al reimprimir: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx.
-