我注意到,在我的班級之一,我有以下幾點:這個小錯字有什麼樣的效果?
public void foo() {
int i = 4;
i = 9 + 0;;
return;
}
兩連勝;;
。爲什麼這不是一個錯誤?它應該是?根據我的理解,這只是編譯器讀取的「額外的」代碼。這是否浪費表現?另外,如果它真的是空的,爲什麼在返回後我不能有兩個;;
? (如return;;
)?
編輯:這在實踐中有什麼用處?
我注意到,在我的班級之一,我有以下幾點:這個小錯字有什麼樣的效果?
public void foo() {
int i = 4;
i = 9 + 0;;
return;
}
兩連勝;;
。爲什麼這不是一個錯誤?它應該是?根據我的理解,這只是編譯器讀取的「額外的」代碼。這是否浪費表現?另外,如果它真的是空的,爲什麼在返回後我不能有兩個;;
? (如return;;
)?
編輯:這在實踐中有什麼用處?
爲什麼這不是一個錯誤?
因爲該語言允許您在一行上編寫單個;
以表示空行。您可以將;
彼此相鄰放置。請參閱JLS §14.6 - Empty Statement。
這是浪費的表現嗎?
我不這麼認爲。你不應該爲這樣的錯誤打字而擔心表現。國際海事組織,額外的分號不會讓它到字節碼。所以,沒有運行時性能差異。
而且,如果真的是空的,我爲什麼不能有兩個;;返回後?
您不能在return
聲明之後放置任何聲明,因爲這不會被執行。這將是一個無法達成的聲明。請參閱JLS §14.21 - Unreachable Statements。
這在實踐中有什麼用處?這是我能想到的這個
的一個用途是要在其中爲實用工具類使用的enum
。在這樣的enum
中,你只是想定義一些靜態方法,而不是任何常量。由於在enum
中定義常量是強制性的,因此不允許在任何常量之前編寫方法。在這種情況下,你可以這樣編寫你的枚舉:
enum Utility {
; // Denote the end of constant declaration. You can't omit this ';'
// Start writing your static methods.
}
不錯的正當理由。我看到很多關於爲什麼一個人的「if」陳述失敗的問題,原因是他們有一個「;」緊隨其後。很煩人! –
@StephenD更多的麻煩了一陣子xD – Cruncher
在java中,允許使用空白語句。 JLS §14.6 - Empty Statement
你不能做return;;
,因爲空白語句將是不可達的代碼,這是不允許的。 JLS 14.21 Unreachable Statements
就浪費性能而言,我相信這會讓您的編譯時間更長一些。但statement;;
和statement;
應該編譯爲相同的字節碼,因此不影響運行時性能。
空白語句也是你必須非常小心你的循環語法的原因。很多時候,我們已經看到了這裏的帖子裏的人有:
while(condition);
{
//code
}
這是一個無限循環,因爲後面的,而空白的聲明,所以它的循環體是空的。
在字節碼中丟棄的構造對性能沒有影響。 –