關於java中String 的內存解析


String a=”abc”;  abc存放在常量池中;

String a =new String(“abc”); new出來的放在內存中的堆區 返回的是內存的引用

String.intern():存在於.class文件中的常量池,在運行期被JVM裝載,並且可以擴充。

String的 intern()方法就是擴充常量池的 一個方法;當一個String實例str調用intern()方法時,Java 查找常量池中 是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒有,則在常量池中增加一個Unicode等於str的字符串並返回它的引用;

示例:

1. String s0= "kvill";   

2. String s1=new String("kvill");   

3. String s2=new String("kvill");   

4. System.out.println( s0==s1 );   

5. System.out.println( "**********" );   

6. s1.intern();   

7. s2=s2.intern(); //把常量池中"kvill"的引用賦給s2   

8. System.out.println( s0==s1);   

9. System.out.println( s0==s1.intern() );   

10. System.out.println( s0==s2 );  

結果爲:

false 
false //雖然執行了s1.intern(),但它的返回值沒有賦給s1 
true //說明s1.intern()返回的是常量池中"kvill"的引用 
true


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