java – 什么时候使用intern()对字符串文字

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

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

我没有看到任何理由intern(),如在Javadoc可以读:“所有文字字符串和字符串值常量表达式是interned。这是否有一些意图,也许在过去的语言修订?

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

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

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

JLS引用:

>编译时常量的定义: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://stackoverflow.com/questions/1833581/when-to-use-intern-on-string-literals

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 什么时候使用intern()对字符串文字