Как values () реализованы для перечислений Java 6?

В Java вы можете создать перечисление следующим образом:

public enum Letter {
    A, B, C, D, E, F, G;

    static {
       for(Letter letter : values()) {
          // do something with letter
       }
    }
}

Этот вопрос касается & quot; values () & quot; метод. В частности, как это реализовано? Обычно я могу перейти к исходному коду для классов Java, используя F3 или CTRL + Click в Eclipse (даже для таких классов, как String, Character, Integer и даже Enum). Можно просмотреть источник других методов перечисления (например, valueOf (String)).

Имеет ли "значения ()" создать новый массив каждый раз, когда он вызывается? Если я присваиваю его локальной переменной, а затем изменяю один из элементов, что происходит (очевидно, это не повлияет на значение, возвращаемое values (), что подразумевает, что каждый раз выделяется новый массив).

Код для него родной? Или JVM / компилятор обрабатывает это специально, возвращая новый экземпляр из values () только тогда, когда он не может доказать, что он не будет изменен.

Ответы на вопрос(3)

Ваш ответ на вопрос