Tar*_*das 26 java compile-time-constant
最终变量和编译时常量之间有什么区别?
请考虑以下代码
final int a = 5;
final int b;
b=6;
int x=0;
switch(x)
{
case a: //no error
case b: //compiler error
}
Run Code Online (Sandbox Code Playgroud)
这是什么意思?何时以及如何为最终变量赋值?运行时会发生什么以及编译时会发生什么?我们为什么要给switch一个编译时常量?java的其他结构需要编译时间常量?
poi*_*oae 27
问题是,所有case:
语句在编译时都必须是最终的.你的第一个陈述是终极的.a
100%将是没有其他价值的5
.
final int a = 5;
Run Code Online (Sandbox Code Playgroud)
然而,这不能保证对b
.如果有一个if语句b
怎么办?
final int b;
if(something())
b=6;
else
b=5;
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
这意味着'b'不是编译时常量表达式,而JLS要求它.
何时以及如何为最终变量赋值?
正式地,当执行赋值语句或初始化程序时.
但实际上,如果final
声明了编译时常量,则表达式在编译时进行计算,并将其值硬连接到代码中.
运行时会发生什么以及编译时会发生什么?
往上看.
我们为什么要给switch一个编译时常量?
因为JLS 需要它.
字节码编译器必须检查switch语句是否格式正确; 即开关常数的值不会发生碰撞.它还允许JIT编译器生成针对开关常量的实际值进行优化的代码.
java的其他结构需要编译时间常量?
没有我能想到的,在我的头脑中.
归档时间: |
|
查看次数: |
8093 次 |
最近记录: |