首先看一段這樣的**
string str1 =
"abc"
; string str2 =
"abc"
; string str3 =
newstring
("abc");
system.out.
println
(str1 == str2)
; system.out.
println
(str2 == str3)
;
返回的結果為 true和false,和想象中的或許有些不一樣是吧。
首先,str1在方法區中的常量池中沒有找到字串abc,所以在常量池中建立乙個字串常量,str2在常量池中找到字串常量,返回乙個引用,所以輸出的為true,str3在常量池中找到abc,返回乙個引用例項,並在堆中建立乙個物件,所以str3建立了乙個新的物件,如果把str3放在第一行會在常量池和堆中分別建立乙個物件,
字串常量池
string的不可變性。字串常量池是不會儲存相同內容的字串。xx stringtablesize設定stringtable的長度。jdk8最小值為1009 string的string pool是固定大小的hashtable 字串常量池在堆中。字串拼接操作 和 equals equals 對於obje...
字串常量池
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 ...