在微基准测试中,是的,检查整数常数相等性将比检查枚举常数相等性更快。
但是,在实际的应用程序中,更不用说游戏了,这将是完全无关紧要的。AWT子系统(或任何其他GUI工具包)中发生的事情使这些微观性能考虑因素相形见绌。
编辑
那么,让我稍微详细阐述一下。
枚举比较如下所示:
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%。
我想说的是,这种差异在实际应用程序中并不重要(“过早优化是所有邪恶的根源”)。我在专业的基础上处理性能问题(请参阅我的个人资料),我从未见过可追溯到此类的热点。