Wie wird values ​​() für Java 6-Enums implementiert?

In Java können Sie eine Aufzählung wie folgt erstellen:

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

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

Diese Frage betrifft die Methode "values ​​()". Wie wird es konkret implementiert? Normalerweise konnte ich mit F3 oder STRG + Klick in Eclipse zur Quelle für Java-Klassen springen (auch für Klassen wie String, Character, Integer und sogar Enum). Es ist möglich, die Quelle der anderen Aufzählungsmethoden (z. B. valueOf (String)) anzuzeigen.

Erstellt "values ​​()" bei jedem Aufruf ein neues Array? Wenn ich es einer lokalen Variablen zugebe und dann eines der Elemente ändere, was passiert (dies hat natürlich keinen Einfluss auf den von values ​​() zurückgegebenen Wert, was impliziert, dass jedes Mal ein neues Array zugewiesen wird).

Ist der Code dafür nativ? Oder behandelt die JVM / der Compiler sie speziell und gibt nur dann eine neue Instanz von values ​​() zurück, wenn nicht nachgewiesen werden kann, dass sie nicht geändert wird.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage