Comment est-valeurs() mis en œuvre pour Java 6 énumérations?

En Java, vous pouvez créer un enum comme suit:

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

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

Cette question concerne les "valeurs" ()" la méthode. Plus précisément, comment est-il mis en œuvre? Habituellement, je pouvais sauter à la source des classes Java à l'aide de F3 ou CTRL+Clic dans Eclipse (même pour des classes comme Chaîne de Caractères, Entier, et même Enum). Il est possible d'afficher la source de l'autre enum méthodes (p. ex., valueOf(String)).

Ne "valeurs" ()" créer un nouveau tableau à chaque fois qu'il est invoqué? Si je l'affecter à une variable locale et de modifier l'un des éléments, ce qui se passe (clairement ce qui n'affecte pas la valeur retournée par les valeurs), ce qui implique qu'un nouveau tableau est alloué à chaque fois).

Est le code natif? Ou ne la JVM /compilateur de traiter spécialement, ne revenant à une nouvelle instance de valeurs() quand il ne peut pas prouver qu'il ne sera pas modifié.

InformationsquelleAutor les2 | 2009-07-22