字串常量池

2021-10-21 12:05:38 字數 2137 閱讀 4592

string的不可變性。

字串常量池是不會儲存相同內容的字串。

-xx:stringtablesize設定stringtable的長度。(jdk8最小值為1009)

string的string pool是固定大小的hashtable

字串常量池在堆中。

字串拼接操作

== 和 equals()

equals():對於object而言是一樣的,但是這個方法可以重寫,所以可以寫成與內容一致。

拼接的底層細節

/*

string s1="a";

string s2="b";

string s3=s1+s2;

string s4="ab";

*//*

s1+s2的細節:

stringbuilder s=new stringbuilder();

s3=s.tostring(); //tostring()類似於new string("ab");

sout(s3 == s4);//true

*/

string的字串拼接方式:建立多個stringbuilder和string物件。記憶體占用更大,如果進行gc,需要花費格外時間。

在實際開發中,如果基本確定前前後後新增的字串長度不高於某個限定值highlevel的情況下,建議使用stringbuilder s=new stringbuilder(highlevel)

intern()方法的使用

string
string myinfo=

newstring

("i love nuaa").

intern()

;//intern()方法會從字串常量池中查詢當前字串是否存在,如果不存在則將當前字串放入常量池中,返回的是該字串常量池中的位址

保證string變數s指向的是字串常量池中的資料?

string s=

"wangguofu"

;string s=

newstring

("wangguofu").

intern()

;string s=

newstringbuilder

("wangguofu").

tostring()

.intern()

;

intern()更加深入理解

public

class

stringintern1

}

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-5qziemwb-1615212272653)(

new string(「ab」)會建立幾個物件?

會建立兩個物件。(可以看位元組碼)

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-f10k1ipl-1615212272655)(

乙個是string的物件,乙個是字串常量池"ab"的物件

new string(「a」)+new string(「b」)會建立幾個物件?

物件2:new string(「a」)

物件3:字串常量池中 「a」

物件4:new string(「b」)

物件5:字串常量池中的"b"

深入剖析:

物件6:stringbuilder.tostring()

強調一下tostring()方法的呼叫,在字串常量池中沒有"ab"(這個tostring方法的new string()傳參的是char)

字串常量池

string a hello string b hello string aa new string aa string bb new string bb 字串常量池在方法區中 其中 變數a jvm先到字串常量池中尋找如果沒有就在字串常量池中建立乙個字串hello,並且將該字串常量池的hello的記...

JAVA 字串常量池

system.out.println s s1 string 類 equals 重寫 比較的內容 system.out.println s.equals s1 字串是常量,它們的值在建立之後不能更改 一旦修改字串儲存的資料 自動建立乙個的物件內部儲存是修改的資料 string s2 abc new ...

java字串常量池

字串常量池,程式當中直接寫上雙引號字串,就在字串常量池中 對於基本型別來說 是進行數值得比較 對於引用型別來說 是進行 位址值 比較 string s1 abc string s2 abc system.out.println s1 s2 結果是 true 採用字面值的方式建立乙個字串時,jvm首先...