在诸如下面 java 代码片段中的情况下,与将 return false 放在 else block 之后相比,用 else block 包围 return false 是更快还是更好?
public boolean test(boolean var){
if (var == true){
return true;
}
return false;
}
相比于
public boolean test(boolean var){
if (var == true){
return true;
}else{
return false;
}
}
显然这是一个非常简单的示例,可以缩短为一行,但我的问题是是否有 jvm 优化可以更有效地使用第二个代码段中的 else block ,或者它是否是更好的做法,因为两者片段在逻辑上是等价的。到目前为止,我一直在使用第一个代码片段,因为代码少了一点。
最佳答案
我编译了两个示例,生成的字节码是相同的:
public boolean test(boolean var);
0 iload_1 [var]
1 ifeq 6
4 iconst_1
5 ireturn
6 iconst_0
7 ireturn
Line numbers:
[pc: 0, line: 5]
[pc: 4, line: 6]
[pc: 6, line: 8]
Local variable table:
[pc: 0, pc: 8] local: this index: 0 type: scratch.Else1
[pc: 0, pc: 8] local: var index: 1 type: boolean
public boolean test(boolean var);
0 iload_1 [var]
1 ifeq 6
4 iconst_1
5 ireturn
6 iconst_0
7 ireturn
Line numbers:
[pc: 0, line: 5]
[pc: 4, line: 6]
[pc: 6, line: 8]
Local variable table:
[pc: 0, pc: 8] local: this index: 0 type: scratch.Else2
[pc: 0, pc: 8] local: var index: 1 type: boolean
至于你应该使用哪一个?在这个人为的例子中,答案是一个响亮的 NEITHER。与行为匹配的最佳代码是这样的:
public boolean test(boolean var){
return var;
}
考虑到“if { return } else { return }”与“if { return } return”的选择,我的回答通常是后者,因为我更喜欢缩进更少。但我认为这真的取决于每个分支中有多少代码。更多else代码指向后者,更多if代码指向前者。
关于Java:在这里包含一个 else 更快吗?还是更好的练习?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9594728/