假設我有下面一段代碼爲什麼java編譯器不能識別字段已被初始化?
int myVar;
final boolean condition = <someCondition>;
if (condition) {
myVar = 1;
}
if (condition) {
System.out.println("myVar = " + myVar);
}
當我編譯此,我得到了預期myVar might not have been initialized
錯誤。 這是編譯器中的錯誤嗎?當condition
爲真時很容易看到「myVar」被設置,並且僅在condition
爲真時才被引用。 (condition
也永遠不會重置)
P.S:對於那些對我的評論需要初始化爲0,是的,我意識到這一點。但問題是,我想「myVar的」要最終
@imk這是相當明顯的OP已經知道,因爲這個問題的整點是關於*爲什麼*編譯器需要初始化。 – azurefrog
Java編譯器根本沒有做足夠深入的分析,得出結論:在使用變量'myVar'之前,一個值總是被分配給變量'myVar'。一般來說,它不會嘗試關聯不同條件語句中的條件。 –
我不認爲編譯器意識到這種情況不會改變。舉例來說,這是在一箇中斷的CPU上運行。條件可能會改變,當它回到執行此。 沒關係,我沒有看條件的聲明。 @JohnBollinger看起來足夠了。 – bhow