何时对字符串文字使用 intern()

2024-06-05

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

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

我看不出使用 intern() 的任何原因,因为在 Javadoc 中可以读到:“所有文字字符串和字符串值常量表达式都被实习。”也许在该语言过去的修订中是否有某种意图?


这是一种技术,可以确保CONSTANT实际上不是一个常数。

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

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


JLS引用:

  • 编译时常量的定义:http://docs.oracle.com/javase/specs/jls/se6/html/expressions.html#5313 http://docs.oracle.com/javase/specs/jls/se6/html/expressions.html#5313

  • 编译时常量更改的含义(大约在页面的中间):http://docs.oracle.com/javase/specs/jls/se6/html/binaryComp.html#45139 http://docs.oracle.com/javase/specs/jls/se6/html/binaryComp.html#45139

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时对字符串文字使用 intern() 的相关文章

随机推荐