我看到很多这样的遗留代码:
class A {
public static final String CONSTANT = "value".intern();
...
}
我看不出使用 intern() 的任何原因,正如在 Javadoc 中人们可以读到的那样:“所有文字字符串和字符串值常量表达式都是实习的。”是否有这样的意图,也许是在过去的语言版本中?
最佳答案
这是一种确保 CONSTANT
实际上不是常量的技术。
当 Java 编译器看到对最终静态原语或字符串的引用时,它会将那个常量的实际值插入到使用它的类中。如果您随后更改定义类中的常量值但不重新编译使用类,它将继续使用旧值。
通过在“常量”字符串上调用 intern(),编译器不再将其视为静态常量,因此使用类实际上会在每次使用时访问定义类的成员。
JLS 引用:
关于java - 何时在字符串文字上使用 intern(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1833581/