class Temp
{
public static void main(String[] args)
{
int x=10,y=20;
while (x<y)
{
System.out.println("Hello");
}
System.out.println("Hi");
}
}
輸出 它打印Hello無限次爲什麼java的最終變量表示不可達聲明
但是當我使局部變量最終詮釋X = 10,Y = 20; 然後它顯示聲明無法達到
您可以通過在循環中放入一個if(somethingThatTheCompilerCannotReasonAbout)break;'來使其再次可達。 – Thilo
也參考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4瞭解常量變量。如果你做int'a = 10; final int x = 10 + a;'那麼x不再是一個常量變量,甚至'while(x == x)'將在無限循環中執行。 – Shail016
這是編譯器知道第二個println在變量爲最終時無法訪問的明確解釋。但是這留下了一個問題:爲什麼不能在變量可變時發現該行仍然無法訪問?循環體中沒有對它們的賦值,當然Java知道這樣的方法 - 局部變量不能在循環體中調用println的內部進行修改。那麼,如果條件不是恆定的,那麼編譯器就不會去評估可達性了嗎? (因爲,你知道,停止問題?) –