gpt4 book ai didi

Java 和编译时常量

转载 作者:行者123 更新时间:2023-11-30 06:32:39 26 4
gpt4 key购买 nike

请问static final原始变量或 String类型,即在定义时被赋值的类型被 Java 编译器视为REAL 编译时常量?
这样的变量是否会获得其他语言中编译常量所具有的性能奖励,比如 C++?

是原始枚举还是String编译器将值视为常量?

据我所知,如果不影响脚本的运行,用常量替换变量总是好的,所以我想知道 const 的空洞含义Java 中的关键字。
提前致谢。

最佳答案

是的,它们是编译时常量。例如代码

private static final boolean DEBUG = false;

...

if (DEBUG) {
// some code
}

将被编译为字节码,甚至不包含 if 中的代码。它将被编译器删除。

如果您决定更改常量的值,则必须重新编译所有引用该常量的类。

但请注意,它只是无法修改的引用。对象的内容(如果它是可变的)可以更改。比如下面代码中数组或者StringBuilder的内容可能会被修改:

// don't do this:
public static final String[] seasons = new String[] {"Spring", "Summer", "Autumn", "Winter"};
public static final StringBuilder someBuffer = new StringBuilder("foo");

你关于枚举的问题没有意义。没有 primitive 或 STring 的枚举。每个枚举都定义了自己的类。

关于Java 和编译时常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com