JDK1.7之下的inern用法

JDK1.7之下的inern用法:

String s = new String("1aaa");  
s.intern();  
String s2 = "1aaa";  
System.out.println(s2 == s.intern());   true
System.out.println(s == s.intern());    false

String s = new String(“1aaa”);
生成了常量池的“1”和堆空間中的字符串對象。 s爲堆空間的內存地址。

s.inern() 檢查對象s是否在常量池中存在,如果存在然後返回該字符串在常量池中的地址。

String s2 = “1aaa”; s2指向的是“1aaa” 在常量池中的地址。因此
s2 == s.intern()爲true。


        String s3 = new String("1a") + new String("1a");  
        s3.intern();  
        String s4 = "1a1a";  
        System.out.println(s4 == s3.intern());  true

String s3 = new String(“1a”) + new String(“1a”);
在常量池中生成字符串la,並在堆中生成s3指向的堆空間,內容爲lala。
此時常量池中沒有lala
s3.intern(); 檢查常量池中是否有lala,如果沒有,則將lala放入常量池中。並返回常量池的地址。

s.inern檢查常量池中是否存在某一個常量,如果存在則返回這個常量的值。
如果不存在,將字符串s的內容放入String常量池中,具體在JDK1.7中常量池不需要再存儲一份對象了,可以直接存儲堆中的引用,也就是s==s.inern 返回true。

PS: s==s.inern並不總是成立。如果常量池中已經存在了這個字符串,則s==s.inern並不相等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章