我怀疑,
任何表达式赋值操作都是 编译时或运行时现象?
e.g Foo f=new Bar();
感谢。
答案 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)
它们两者。
编译时间 - 在编译时分析分配的类型兼容性,注入代码以进行转换/装箱/拆箱等。甚至一些流分析也会影响分配,例如:变量及其赋值可以完全优化。
运行时 - 实际分配一个值,即改变变量内存位置的位,当然是在运行时发生的。