Java 语言文档说:
如果原始类型或字符串被定义为常量并且值在编译时已知,则编译器将代码中任何地方的常量名称替换为其值。这称为编译时常量。
我的理解是如果我们有一段代码:
private final int x = 10;
然后,编译器会将x
代码中出现的每一个 替换为 literal 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
是一个变量,不会被视为常量。
我的理解正确吗?