¿Cómo hace la clase de cadena el almacenamiento en caché de Hashcode en Java

Here what is written in String API for Hashcode------
public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

¿Alguien puede explicar cómo está sucediendo el almacenamiento en caché aquí?

Una pista es: ----if (h == 0 && value.length> 0) { El código solo irá dentro de esta condición, solo entonces se calcula el código hash, de lo contrario se escribe lo mismo, pero cómo sucede esto para dos cadenas creadas con nuevos como:

Cadena a = nueva Cadena ("abc"); Cadena b = nueva Cadena ("abc"); Por favor explique

Respuestas a la pregunta(2)

Su respuesta a la pregunta