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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值