Java:在这里包含一个 else 更快吗?还是更好的练习?

标签 java optimization

在诸如下面 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/

相关文章:

Java:有损图像压缩算法

java - 如何通过命令行向testng xml传递参数

c# - 空闲/网络利用率低时下载

c++ - 通过 "this->member"访问 c++ 成员类比隐式调用 "member"更快/更慢

performance - Clojure 并行映射和无限序列

java - 嵌套类匿名类

java - 检查用户输入是否仅是 Java 中的整数

java - 将一个数字添加到固定的最大数字

python - 如何有效地将数据框中的条目映射到字典

optimization - Ultraseek 5.7 的搜索引擎优化