Я смотрел на некоторые из примитивных коллекций java (trove, fastutil, hppc), и я заметил шаблон, который являются переменными класса иногда объявляется как final
локальные переменные. Например:
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]);
}
}
}
Я сделал некоторый бенчмаркинг, и кажется, что он немного быстрее, когда делаешь это, но почему это так? Я пытаюсь понять, что Java будет делать по-другому, если бы первые три строки функции были прокомментированы.
Примечание. Это похоже на этот вопрос, но это было для С++ и не учитывает, почему они объявлены final
.