表达式的赋值 - 编译或运行时现象

时间:2011-02-03 14:28:33

标签: java object runtime compilation reference

我怀疑,

  

任何表达式赋值操作都是   编译时或运行时现象?
  e.g Foo f=new Bar();

感谢。

4 个答案:

答案 0 :(得分:4)

如果您编译以下内容:

int x = 34 + 45;

然后将在编译时评估您要分配的表达式,因为它只涉及常量基本类型。在大多数其他情况下,包括您的示例,表达式将在运行时进行评估。

答案 1 :(得分:2)

我不知道你到底有什么疑问,但我认为在编译期间,程序的文本表示被翻译成机器可理解的形式(在Java情况下它是Java字节代码)。分配等操作也会发生同样的情况。在运行时,执行此类操作。因此,为了准确回答您的问题,赋值操作是编译和运行时现象(在两种情况下都采取某些操作 - 在编译的情况下,它们由Java编译器完成,在运行时由JVM完成)。

例如,

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

此代码将被编译器拒绝。当你试图分配不兼容的类型时,你会大吼大叫。

答案 2 :(得分:1)

它的运行时间

Foo f将在运行时引用Object Bar创建的运行时。

有编译时间检查。 Bar必须是Foo才能成功编译

答案 3 :(得分:1)

它们两者。

  1. 编译时间 - 在编译时分析分配的类型兼容性,注入代码以进行转换/装箱/拆箱等。甚至一些流分析也会影响分配,例如:变量及其赋值可以完全优化。

  2. 运行时 - 实际分配一个值,即改变变量内存位置的位,当然是在运行时发生的。