天天看點

Java中的String、StringPool(字元串常量池)

字元串常量池與簡單文法

String s  = "hahahah";
String s2 = "hahahah";
1->在字元串常量池中檢視是否存在内容與"hahahah"相同的字元串對象;
2->若沒有,則新建立一個包含該内容的字元串對象,并讓引用變量指向該對象。例如,建立字元串s的時候,字元串常量池中沒有,則建立一個新對象,并讓s指向該對象;
3->若已存在包含該内容的字元串對象,則讓字元串引用直接指向該對象。例如,建立s2時。
因為s和s2指向同一個對象,是以s==s2。
           

字元串常量池與new文法

String s = new String("ssss");
1->直接在堆中建立一個包含指定内容的字元串對象,并将字元串引用指向該對象;
2->在字元串常量池中檢視,是否有包含該内容的對象;
3->若字元串常量池中存在此對象,便将new出來的對象與字元串常量池中内容相同的對象聯系起來。
4->若沒有,則在字元串常量池中再建立一個包含該内容的字元串對象,并将堆中的對象與字元串常量池中的對象聯系起來。
           

public String intern()

此方法将指定字元串對象在字元串常量池中對應對象的引用傳回。若本身就在字元串常量池中,則直接将自己的引用傳回,若在堆中,則傳回字元串常量池中其聯系對象的引用。