java - if(condition) else or if(condition),使用break时性能有区别吗?

标签 java performance if-statement

这个问题有点模棱两可,这两个在汇编代码/性能方面是否等效:

public void example{
  do{
     //some statements;
     if(condition) break;
     //some statements;
  }while(true);
}

对比:

public void example{
  do{
     //some statements;
     if(condition){ 
     break;
     }else{
     //some statements;
     }
  }while(true);
}

最佳答案

它们是等价的,它们应该产生相同的字节码表示。因此,在性能方面,它们是相同的。

ifelsebreak 是分支指令。在这种情况下,break 将终止循环并且程序转到不同的分支。如果不满足条件,则采用另一个分支,完全 else 采取的相同分支。

使用 javac 编译器的例子:

int a = System.in.read();
do {
    System.out.println("a");
    if (a > 0) {
        break;
    } else {
        System.out.println("b");
    }
} while (true);

这个和没有 else 都会产生以下内容:

getstatic java/lang/System/in Ljava/io/InputStream;
invokevirtual java/io/InputStream/read()I
istore_1
getstatic java/lang/System/out Ljava/io/PrintStream;            :label1
ldc "a"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
iload_1
ifle <label2>
goto <label3>
getstatic java/lang/System/out Ljava/io/PrintStream;            :label2
ldc "b"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
goto <label1>
return                                                          :label3

关于java - if(condition) else or if(condition),使用break时性能有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745014/

相关文章:

Python从列表a中查找列表b中的项目索引

java - 如何在每次提交/推送之前运行我的 Spring 测试?

java - 为什么 AsyncTask 在添加新数据后不自动更新 GraphView?

java - Telnet 客户端 - Java

java - 从 Java BlockingQueue 并发按顺序处理工作项

javascript - 当页面不是在 Chrome 中打开时发出警报

java - 通过 SMTP Gmail Oauth2 问题发送邮件

java - 测量 java.io.InputStream 的性能

比较 C 中的十六进制

java - 的解释?和 : operators