java 枚举 性能_Java:枚举与if-then-else的性能

是的,因为一般来说,switch语句的工作速度比if / else链的速度要快.

虽然生成的字节码并不总是确定性能比较的来源,但您可以检查它是否有更好的想法.

例如这个代码:

class A {

enum N { ONE,TWO,THREE }

void testSwitch( N e ) {

switch( e ) {

case ONE : x(); break;

case TWO : x(); break;

case THREE : x(); break;

}

}

void testIf( Enum e ) {

if( e == N.ONE ) { x(); }

else if( e == N.TWO ) { x(); }

else if( e == N.THREE ) { x(); }

}

void x(){}

}

Compiled from "A.java"

class A extends java.lang.Object{

A();

Code:

0: aload_0

1: invokespecial #1; //Method java/lang/Object."":()V

4: return

void testSwitch(A$N);

Code:

0: getstatic #2; //Field A$1.$SwitchMap$A$N:[I

3: aload_1

4: invokevirtual #3; //Method A$N.ordinal:()I

7: iaload

8: tableswitch{ //1 to 3

1: 36;

2: 43;

3: 50;

default: 54 }

36: aload_0

37: invokevirtual #4; //Method x:()V

40: goto 54

43: aload_0

44: invokevirtual #4; //Method x:()V

47: goto 54

50: aload_0

51: invokevirtual #4; //Method x:()V

54: return

void testIf(java.lang.Enum);

Code:

0: aload_1

1: getstatic #5; //Field A$N.ONE:LA$N;

4: if_acmpne 14

7: aload_0

8: invokevirtual #4; //Method x:()V

11: goto 39

14: aload_1

15: getstatic #6; //Field A$N.TWO:LA$N;

18: if_acmpne 28

21: aload_0

22: invokevirtual #4; //Method x:()V

25: goto 39

28: aload_1

29: getstatic #7; //Field A$N.THREE:LA$N;

32: if_acmpne 39

35: aload_0

36: invokevirtual #4; //Method x:()V

39: return

void x();

Code:

0: return

}

这两种情况似乎都相当快.

所以,选择一个更容易维护的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值