是的,是的,因为一般而言,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."<init>":()V 4: returnvoid 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: returnvoid 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: returnvoid x(); Code: 0: return}在两种情况下,这似乎都非常快。
因此,选择一种易于维护的工具。



