String中的 intern 方法

String的intern方法 是一个Native方法  它的作用是:如果字符串常量池中已经包含一个等于此string对象的字符串,则返回这个字符串对象 ;否则将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。

intern方法会把首次遇到的字符串实例复制到永久代中,返回的也是永久代中这个字符串实例的引用。

上面是jdk1.7的说明   在1.8中 用元空间来代替永久代


  Open Declaration   String java.lang.String.intern()


Returns a canonical representation for the string object. 

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

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

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

All literal strings and string-valued constant expressions areinterned. 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 isguaranteed to be from a pool of unique strings.
public class PermGenTest {

	public static void main(String[] args) {
		String aa="abc";
		String bb = aa.intern();
		System.out.println(aa==bb);  //true 
		
		
		String str1= new StringBuffer("jav").append("a").toString();
		String str2 = str1.intern();   //intern  会把首次遇到的字符串实例复制到永久代中   上面的  str1  不是首次了 因为java是自带的   所以他们所指的地址不一样
	   System.out.println(str1==str2);   //false
	   String  aaa="java";    //  调用常量池中
	   System.out.println(aaa==str2);  // true1
	   
	   
	   String s1= new StringBuffer("九三").append("班").toString();
	   String s2 = s1.intern();
	   System.out.println(s1==s2); //true
	
	}
}

具体请参考:

  https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html

发布了19 篇原创文章 · 获赞 8 · 访问量 4133

猜你喜欢

转载自blog.csdn.net/paohui001lqp/article/details/99831243