の文字列のインターン方法

文字列のインターン方法は、ネイティブその役割の方法である:文字列定数プールはすでに文字列は、この文字列オブジェクトに等しい含まれている場合、この文字列オブジェクトが返され、そうでない場合、この文字列は定数プールを含むStringオブジェクトに追加されます、このStringオブジェクトを返します。

永久世代にコピー例インターンストリングメソッドする最初の出会いは、この文字列の例を引用すると、永久的な世代のリターンです。

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