java - 何时在字符串文字上使用 intern()

标签 java string string-interning

我看到很多这样的遗留代码:

class A {
    public static final String CONSTANT = "value".intern();
    ...
}

我看不出使用 intern() 的任何原因,正如在 Javadoc 中人们可以读到的那样:“所有文字字符串和字符串值常量表达式都是实习的。”是否有这样的意图,也许是在过去的语言版本中?

最佳答案

这是一种确保 CONSTANT 实际上不是常量的技术。

当 Java 编译器看到对最终静态原语或字符串的引用时,它会将那个常量的实际值插入到使用它的类中。如果您随后更改定义类中的常量值但不重新编译使用类,它将继续使用旧值。

通过在“常量”字符串上调用 intern(),编译器不再将其视为静态常量,因此使用类实际上会在每次使用时访问定义类的成员。


JLS 引用:

关于java - 何时在字符串文字上使用 intern(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1833581/

相关文章:

java - 为什么 String.intern() 在 JDK 8 和 JDK 9 下返回不同的结果?

java - 使用命名空间和前缀进行 JAXB 解码

java - Process Builder递增错误

java - 在没有准备好的语句(JDBC)的情况下防止 SQL 注入(inject)

c++ - 指向字符串中的单个字符

c# - String.Intern 有这个值(value)吗?

java - 我对速度 apache 脚本很陌生

php - 内置函数在 php 中组合重叠的字符串序列?

linux - 如何在 xargs 中返回字符串的长度(特殊字符)

java - "java"与 intern() 的字符串比较为假