Es más rápido acceder a las variables locales finales que a las variables de clase en Java?

He estado mirando algunas de las colecciones primitivas de Java trove, fastutil, hppc) y he notado un patrón que las variables de clase a veces se declaran comofinal variables locales. Por ejemplo

public void forEach(IntIntProcedure p) {
    final boolean[] used = this.used;
    final int[] key = this.key;
    final int[] value = this.value;
    for (int i = 0; i < used.length; i++) {
        if (used[i]) {
          p.apply(key[i],value[i]);
        }
    }
}

He realizado algunas evaluaciones comparativas, y parece que esligerament más rápido al hacer esto, pero ¿por qué es este el caso? Estoy tratando de entender qué haría Java de manera diferente si se comentaran las primeras tres líneas de la función.

Nota: Esto parece similar aesta pregunt, pero eso fue para c ++ y no aborda por qué se declaranfinal.

Respuestas a la pregunta(5)

Su respuesta a la pregunta