if then else用法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

}

在两种情况下,这似乎都非常快。

因此,选择一种易于维护的工具。

2020-11-01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值