2015-04-22 42 views
4

在我的IDE中工作時,我發現了一些相當奇怪的東西。涉及鑄造的奇怪編譯錯誤

double x1 = 0, x2 = 0; 
int a = (int) x1 = (int) x2; 

所以這是無效的語法,毫不奇怪。但是,這是的解釋,爲什麼這是無效的語法,讓我困惑。當我把這個代碼在Eclipse露娜和懸停在第二行,會出現一個消息,說:

類型不匹配:不能從布爾值轉換爲int

1可快速修復:

變化的「a」到「布爾」類型

如果我忽略該錯誤並繼續到反正運行,即使是Throwable的棧跟蹤顯示相同的消息:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
     Type mismatch: cannot convert from boolean to int 
     Syntax error on token "=", <= expected 

我不明白爲什麼編譯器認爲(int) x1 = (int) x2是某種比較,評估結果爲truefalse。有沒有人有這樣的想法?

+0

那麼,這需要一段時間才能被javac執行,並且錯誤是不同的:*意外類型,必需:變量found:value *。 –

+0

我可以看到從哪裏來。你認爲這是一個Eclipse特有的錯誤? – TNT

+0

是的。在處理奇怪的編譯器異常錯誤時,嘗試先用javac編譯代碼,它將提供*更好的*編譯錯誤消息。 –

回答

3

castoperator比賦值運算符具有更高的優先級。由於這一點,你不能投值分配給x1,因爲編譯器實際上將其解釋爲:

... 
cast x1 to integer 
assign (int) x2 to the value of (int) x1 
... 

第2步是行不通的,因爲(int) x1沒有lvalue(SRY使用從C++一詞,我不知道在java中是否存在同義詞)。