现在的位置: 首页 > 综合 > 正文

十一 intern 方法

2018年04月10日 ⁄ 综合 ⁄ 共 1726字 ⁄ 字号 评论关闭
文章目录

 

intern

public String intern()
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 §3.10.5 of the
Java Language Specification

package testPackage;
class Test {
	public static void main(String[] args) {
		String hello = "Hello", lo = "lo";
		System.out.print((hello == "Hello") + " ");
		System.out.print((Other.hello == hello) + " ");
		System.out.print((other.Other.hello == hello) + " ");
		System.out.print((hello == ("Hel"+"lo")) + " ");
		System.out.print((hello == ("Hel"+lo)) + " ");
		System.out.println(hello == ("Hel"+lo).intern());
	}
}
class Other { static String hello = "Hello"; }

and the compilation unit:

package other;
public class Other { static String hello = "Hello"; }

produces the output:

true true true true false true

This example illustrates six points:

  • Literal strings within the same class
    (§8)
    in the same package
    (§7)
    represent references to the same String object
    (§4.3.1)
    .
  • Literal strings within different classes in the same package represent references to the same
    String object.
  • Literal strings within different classes in different packages likewise represent references to the same
    String object.
  • Strings computed by constant expressions
    (§15.28)
    are computed at compile time and then treated as if they were literals.
  • Strings computed at run time are newly created and therefore distinct.
  • The result of explicitly interning a computed string is the same string as any pre-existing literal string with the same contents.

抱歉!评论已关闭.