编译时常量和变量
Java语言文档说:
如果将基元类型或字符串定义为常量,并且该值在编译时已知,则编译器会将代码中所有位置的常量名称替换为其值。这称为编译时常量。
我的理解是,如果我们有一段代码:
private final int x = 10;
然后,编译器会将代码中出现的 每个匹配项替换为文字 。x
10
但假设该常量在运行时初始化:
private final int x = getX(); // here getX() returns an integer value at run-time.
与编译时常量相比,性能是否会下降(无论可以忽略不计)?
另一个问题是下面的代码行是否:
private int y = 10; // here y is not final
编译器以与编译时常量相同的方式处理?
最后,我从答案中了解到的是:
-
final static
表示编译时常量 - 只是意味着它是一个常量,但在运行时初始化
final
- 只是意味着在运行时初始化
static
- without 是一个变量,不会被视为常量。
final
我的理解是否正确?