这个问题有点模棱两可,这两个在汇编代码/性能方面是否等效:
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);
}
最佳答案
它们是等价的,它们应该产生相同的字节码表示。因此,在性能方面,它们是相同的。
if
、else
和break
是分支指令。在这种情况下,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/