En primer lugar, el resultado de hashCode depende en gran medida del tipo de objeto y su implementación. cada clase, incluidas sus subclases, puede definir su propio comportamiento. Puede confiar en él siguiendo el contrato general tal como se describe en el javadoc y en otras respuestas. pero no es necesario que el valor permanezca igual después de reiniciar la máquina virtual. especialmente si depende de las implementaciones .hashCode de las clases de terceros.
cuando se refiere a la implementación concreta de la clase String, no debe depender del valor de retorno. si el programa se ejecuta en una VM diferente, podría cambiar potencialmente.
si se refiere únicamente a Sun Vm, podría argumentarse que Sun no romperá, ni siquiera programó mal, el código existente.por lo que "prueba" .hashCode() siempre devolverá exactamente 3556498 para cualquier versión de Sun VM.
si quieres dispararte deliberadamente en el pie, sigue adelante y depende de esto. las personas que necesiten reparar el código que se ejecuta en la "VM Nintendo Java 2015 para secador de pelo" gritarán su nombre por la noche.
(Aunque será diferente si puede encontrar un JDK 1.0. La definición errónea en los documentos de la API arrojaría excepciones si se implementa). –
También está bien definido para la mayoría de las colecciones – finnw