¿Cómo se implementan los valores () en Java 6 enums?

En Java, puede crear una enumeración de la siguiente manera:

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

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

Esta pregunta se refiere al método de "valores ()". En concreto, ¿cómo se implementa? Por lo general, podría saltar a la fuente de las clases de Java usando F3 o CTRL + Click en Eclipse (incluso para clases como String, Character, Integer, e incluso Enum). Es posible ver la fuente de los otros métodos de enumeración (por ejemplo, valueOf (String)).

¿"Values ​​()" crea una nueva matriz cada vez que se invoca? Si lo asigno a una variable local y luego modifico uno de los elementos, lo que sucede (claramente esto no afectará el valor devuelto por los valores (), lo que implica que se asigna una nueva matriz cada vez).

¿Es el código para que sea nativo? O bien, el JVM / compilador lo trata especialmente, solo devuelve una nueva instancia de valores () cuando no puede probar que no se modificará.

Respuestas a la pregunta(3)

Su respuesta a la pregunta