gpt4 book ai didi

java - 为什么编译时常量仅限于原语和字符串?

转载 作者:行者123 更新时间:2023-11-30 03:07:18 25 4
gpt4 key购买 nike

这只是出于好奇,我想我也知道答案,但只是想验证并了解其他观点。

Compile time constants and variables告诉编译时常量仅限于原始类型和字符串。为什么即使我将某种类型 A 的引用声明为 final ( final A aObj = new A(); )?是因为类还没有加载还是其他原因? JDK 中还有很多其他不可变类,Complete List of immutable JDK classes? ,为什么那些不包括在内?

最佳答案

因为对象(可变或不可变)的构造可能会产生必须在运行时发生的副作用。 String 是个异常(exception),因为 Java 语言认为这种情况永远不会发生。它的另一个特殊之处在于它是 Java 语言规范所依赖的少数类之一;即在文字处理中,以及某些 switch 语句的语义(Java 6 及更高版本)。

后者与“编译时常量”特别相关,因为开关臂表达式需要是编译时常量表达式。

其他一些因素:

  • 编译时常量的处理对于编译器和运行时 JVM 来说都更加复杂

  • 在增量编译代码时,编译时常量可能会出现意外行为,因此限制发生该行为的情况是有益的(对于程序员而言),

  • 使更多类型有资格成为编译时常量可能没有太多实际好处。

关于java - 为什么编译时常量仅限于原语和字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34429097/

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