他們是等價的,他們應該導致相同的字節碼錶示。因此在性能方面,它們是相同的。
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
這取決於編譯器,並可能會看起來是一樣的,你有沒有嘗試看看這些選項的組合? – MByD 2014-11-04 21:08:46
答案是,不,應該不會有性能差異(假設智能設計的編譯器)。已經完成了條件的必要比較,因此「其他」沒有額外的性能成本。 我沒有資源來支持自己,這就是爲什麼我要評論而不是回答。 – 2014-11-04 21:13:07
在這兩種選擇之間進行優化的努力是不值得的。 – khelwood 2014-11-04 21:13:48