2011-02-03 57 views

回答

1

其運行時

Foo f將參照Object創建的Bar運行在運行時。

有編譯時檢查它。 Bar必須是Foo這個編譯成功

+0

好的。謝謝Jigar! – Anonymous 2011-02-03 14:33:51

4

如果你編譯如下:

int x = 34 + 45; 

然後您將分配在編譯時進行評估,因爲它涉及唯一不變的基本類型的表達式。在其他大多數情況下,包括您的示例,表達式都將在運行時進行評估。

2

我不知道你的疑問到底是什麼,但我認爲在編譯過程中,程序的文本表示被翻譯成機器可理解的形式(在Java中是Java字節碼)。像分配這樣的操作也會發生同樣的情況。在運行時,執行這些操作。因此,要精確地回答你的問題,賦值操作既是編譯操作又是運行時現象(在兩種情況下都採取了某些操作 - 在編譯時它們由Java編譯器完成,而在運行時則由JVM完成)。

例如,

class Foo { } 
class Bar { } 
Foo f = new Bar(); 

這段代碼被編譯器被拒絕。它會對你大喊,你正試圖分配不兼容的類型。

1

它的兩個。

  1. 編譯時間 - 分配在編譯時間類型兼容性進行分析,用於注射的代碼來執行轉換/裝箱/拆箱等。即使一些流分析能影響分配,例如變量及其分配可以完全被優化。

  2. 運行時間 - 值的實際賦值,即更改變量內存位置中的位數當然會在運行時發生。