В микропроцессоре да, проверка равенства целочисленных констант будет быстрее, чем проверка равенства констант перечислений.
Однако в реальном приложении, не говоря уже об игре, это будет совершенно неактуально. То, что происходит в подсистеме AWT (или любом другом инструментарии GUI), затмевает эти соображения по поводу микропроизводительности на много порядков.
EDIT
Позвольте мне немного подробнее остановиться.
Сравнение перечислений выглядит так:
aload_0
getstatic
if_acmpne
Целочисленное сравнение для небольшого целого числа выглядит так:
iload_0
iconst_1
if_icmpne
Очевидно, что первая работа больше, чем вторая, хотя разница довольно мала.
Запустите следующий контрольный пример:
class Test {
static final int ONE = 1;
static final int TWO = 2;
enum TestEnum {ONE, TWO}
public static void main(String[] args) {
testEnum();
testInteger();
time("enum", new Runnable() {
public void run() {
testEnum();
}
});
time("integer", new Runnable() {
public void run() {
testInteger();
}
});
}
private static void testEnum() {
TestEnum value = TestEnum.ONE;
for (int i = 0; i < 1000000000; i++) {
if (value == TestEnum.TWO) {
System.err.println("impossible");
}
}
}
private static void testInteger() {
int value = ONE;
for (int i = 0; i < 1000000000; i++) {
if (value == TWO) {
System.err.println("impossible");
}
}
}
private static void time(String name, Runnable runnable) {
long startTime = System.currentTimeMillis();
runnable.run();
System.err.println(name + ": " + (System.currentTimeMillis() - startTime) + " ms");
}
}
и вы обнаружите, что сравнение перечислений медленнее, чем сравнение целых чисел, на моей машине примерно на 1,5%.
Все, что я говорил, это то, что это различие не будет иметь значения в реальном приложении («Преждевременная оптимизация - корень всего зла»). Я имею дело с проблемами производительности на профессиональном уровне (см. Мой профиль), и я никогда не видел горячей точки, которая может быть связана с чем-то вроде этого.