一尘不染

最终变量与编译时间常数之间的差异

java

最终变量和编译时间常数之间有什么区别?

考虑以下代码

final int a = 5;
final int b;
b=6;
int x=0;
switch(x)
{
     case a: //no error
     case b: //compiler error
}

这是什么意思?何时以及如何为最终变量分配值?在运行时会发生什么,在编译时会发生什么?为什么要给switch一个编译时间常数?Java还有哪些其他结构需要编译时间常数?


阅读 193

收藏
2020-12-03

共1个答案

一尘不染

问题在于, 所有case:语句在编译时 必须是最终的 。您的第一个陈述 是最终决定
a对于100%,除以外没有其他值5

final int a = 5;

然而,这 不能保证b。如果周围有一个if语句b怎么办?

final int b;
if(something())
   b=6;
else
   b=5;
2020-12-03