2011-02-03 54 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. 运行时间 - 值的实际赋值,即更改变量内存位置中的位数当然会在运行时发生。