mais rápido acessar variáveis locais finais do que variáveis de classe em Jav
Estive analisando algumas das coleções primitivas java trove, fastutil, hppc) e notei um padrão de que variáveis de classe às vezes são declaradas comofinal
variáveis locais. Por exemplo
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]);
}
}
}
Fiz alguns testes comparativos e parece que élevement mais rápido ao fazer isso, mas por que isso acontece? Estou tentando entender o que o Java faria diferente se as três primeiras linhas da função fossem comentada
Nota: Isso parece semelhante aessa questã, mas isso era para c ++ e não aborda por que eles são declaradosfinal
.