我没有真正的运气可以通过使用Google来获得这种比较的简洁答案,我想先问一下,而不是自己进行耗时的评估。
我相当确定使用Enums的switch语句将比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."<init>":()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
}
在两种情况下,这似乎都非常快。
因此,选择一种易于维护的工具。
if-then语句后面可以跟一个可选的else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) if-then-else语句的语法是 - if condition then S1 else S2; 其中, S1和S2是不同的陈述。 Please note that the statement S1 is not followed by a semicolon 。 在if-th
If语句后面可以跟一个可选的Else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) VB.Net中If ... Then ... Else语句的语法如下 - If(boolean_expression)Then 'statement(s) will execute if the Boolean expression is true Else 'statement(
if-then语句后跟一个可选的else语句,该语句在布尔表达式为false时执行。 使用if-then ... else语句,我们可以在一行中编写if ... else语句。 语法 (Syntax) 以下是CoffeeScript中if-then...else语句的语法。 if expression <b>then</b> Statements (for true condition) else
if… then语句后面可以跟一个可选的else statement,该else statement,在逻辑表达式为false时执行。 语法 (Syntax)> if… then… else语句的基本语法是 - if (logical expression) then statement(s) else other_statement(s) end if 但是,如果给
if/then语句后面可以跟一个可选的else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) F#编程语言中if/then/else语句的语法是 - if expr then expr else expr 流程图 (Flow Diagram) 例子 (Example) let a : int32 = 100 (* check the boolean condit
if/then/elif/else构造具有多个else分支。 语法 (Syntax) F#编程语言中if/then/elif/else语句的语法是 - if expr then expr elif expr then expr elif expr then expr ... else expr 例子 (Example) let a : int32 = 100 (* che