java - 为什么最终变量不总是一个常量表达式?

标签 java expression constants compile-time-constant narrowing

在下面的代码中:

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 a final variable whose declaration lacks an initializer.

A constant variable is a final variable of primitive type or type String that is initialized with a constant expression (§15.28).

你的变量

final int a;

是一个空白final变量。它缺少初始化程序。第二段不适用于它,因为它没有在声明时初始化。因此它不是一个常量表达式。

这也适用于字段。

关于java - 为什么最终变量不总是一个常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30785220/

相关文章:

java - 在java中获取用于tcp连接的开放套接字

java - 如何使用反射获取字段值?

java - 如何使用@Value Spring Annotation 注入(inject) Map?

c - 斐波那契数列中的错误

linux - 正则表达式和 grep

angular - 在组件模板中使用服务中的静态函数

c - 初始化全局变量适用于整数文字但不适用于 const 类型变量

python - ctypes 中的 const void* 指针

c++ - const 引用对象上引用的变异值

java - 在 Eclipse RCP 应用程序中重用 Eclipse Run 菜单