在下面的代码中:
final int a;
a=2;
byte b=a; // error: possible loss of precision
为什么会出现此错误? a
final 变量不是编译时常量表达式,因此在赋值期间隐式缩小为字节吗?
换句话说,上面的代码不等同于:
final int a=2;
byte b=a;
最佳答案
来自 JLS
A blank
final
is afinal
variable whose declaration lacks an initializer.A constant variable is a
final
variable of primitive type or typeString
that is initialized with a constant expression (§15.28).
你的变量
final int a;
是一个空白final
变量。它缺少初始化程序。第二段不适用于它,因为它没有在声明时初始化。因此它不是一个常量表达式。
这也适用于字段。
关于java - 为什么最终变量不总是一个常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30785220/