我看到很多这样的遗留代码:
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(使用前将#替换为@)