If(condition)else或If(conditions),在使用break时是否存在性能差异



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

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

最新更新