Является ли доступ к конечным локальным переменным быстрее, чем к переменным класса в Java?

Я просматривал некоторые из примитивных коллекций Java ( trove , fastutil , hppc ) и I ' Мы заметили закономерность, согласно которой переменные класса иногда объявляются как 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 сделала бы по-другому, если бы первые три строки функции были закомментированы.

Примечание: это похоже на этот вопрос , но это было для c ++ и не адрес, почему они объявлены окончательными .

14
задан Community 23 May 2017 в 10:29
поделиться