В Java вы можете создать перечисление следующим образом:
public enum Letter {
A, B, C, D, E, F, G;
static {
for(Letter letter : values()) {
// do something with letter
}
}
}
Этот вопрос касается метода "values ()". В частности, как это реализовано? Обычно я мог перейти к исходному для классов Java, используя F3 или CTRL + Click в Eclipse (даже для таких классов, как String, Character, Integer и даже Enum). Можно просмотреть источник других методов перечисления (например, valueOf (String)).
Создает ли "values ()" новый массив при каждом вызове? Если я назначу его локальной переменной и затем изменю один из элементов, что произойдет (очевидно, это не повлияет на значение, возвращаемое значениями(), что означает, что каждый раз выделяется новый массив).
Является ли код для него родным? Или JVM/компилятор рассматривает это специально, только возвращая новый экземпляр из значений(), когда он не может доказать, что он не будет изменен.