天天看點

String類和常量池

  在Java的記憶體分析中,我們會經常聽到關于“常量池”的描述,實際上常量池也分了以下三種:

1. 全局字元串常量池(String Pool)

      全局字元串常量池中存放的内容是在類加載完成後存到String Pool中的,在每個VM中隻有一份,存放的是字元串常量的引用值(在堆中生成字元串對象執行個體)。

2. class檔案常量池(Class Constant Pool)

      class常量池是在編譯的時候每個class都有的,在編譯階段,存放的是常量(文本字元串、final常量等)和符号引用。

3. 運作時常量池(Runtime Constant Pool)

      運作時常量池是在類加載完成之後,将每個class常量池中的符号引用值轉存到運作時常量池中,也就是說,每個class都有一個運作時常量池,類在解析之後,将符号引用替換成直接引用,與全局常量池中的引用值保持一緻。

1

2

3

4

5

6

7

8

String str1 = 

"abc"

;

String str2 = 

new

String(

"def"

);

String str3 = 

"abc"

;

String str4 = str2.intern();

String str5 = 

"def"

;

System.out.println(str1 == str3);

// true

System.out.println(str2 == str4);

// false

System.out.println(str4 == str5);

// true

下一篇: C++中String類