java – 编译时常量和变量

Java语言文档说:

If a primitive type or a string is defined as a constant and the value
is known at compile time, the compiler replaces the constant name
everywhere in the code with its value. This is called a compile-time
constant.

我的理解是,如果我们有一段代码:

private final int x = 10;

然后,编译器将用文字10替换代码中每次出现的x.

但假设常量在运行时初始化:

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表示编译时常量
> just final意味着它是一个常量但在运行时被初始化
>只是静态意味着在运行时初始化
>没有final是一个变量,不会被视为常量.

我的理解是否正确?

解决方法:

编译时间常数必须是:

>宣布决赛
>原始或字符串
>在声明中初始化
>用常量表达式初始化

所以私有final int x = getX();不是恒定的.

对于第二个问题,private int y = 10;不是常数(在这种情况下是非final),因此优化器无法确定该值将来不会更改.所以它不能像恒定值那样优化它.答案是:不,它的处理方式与编译时间常数不同.

上一篇:php – define()与const


下一篇:如何在Python中创建常量?