Java String intern() 方法解析 常量池

时间:2022-12-29 17:23:17

Java String intern() 方法

看例子

    public static void main(String[] args) {
String a = "a";
String aa = new String("a");
System.out.println(a == aa);
}

输出为 false

如果是这样

public static void main(String[] args) {
String a = "a";
String aa = new String("a").intern();
System.out.println(a == aa);
}

输出为 true

分析原因

Returns a canonical representation for the string object.

A pool of strings, initially empty, is maintained privately by the class String.

When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.

It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.

All literal strings and string-valued constant expressions are interned. String literals are defined in section 3.10.5 of the The Java™ Language Specification.

Returns:
a string that has the same contents as this string, but is guaranteed to be from a pool of unique strings.

意思就是 intern() 方法会检查运行时常量池(Runtime Constant Pool), 如果池中已经有了这个 String, 那么就返回池中的 String