Java中String的不可變性和創建String的內存變化

String的不可變性並不是指它的值不可變,而是原來那塊所佔的內存不能修改


比如說:String s="123"    s ="12345" 這時候s的值變了,並不是覆蓋了原有堆內存中,而是重新在堆中創建的新的內存區域並將s引用指向了新內存。


ps:StringBuffer和StringBuilde可以在原內存塊基礎上修改,不需要創建新的內存區域。StringBuffer線程安全效率不高,StringBuilder線程不安全效率高


2.創建String內存如何進行分配

2.1 String str="123" 會在常量池劃分內存區域 然後在堆內存劃分區域。若第二次又出現 String strs="123" .Jvm會去常量池中看是否存在相同內容的字符串。若存在引用指向strs.所以strs str引用地址一樣 str==strs 所以爲true

2.2 String str="123"  String str2="12"+"3"  編譯器會自動合併str2 發現內容一樣 地址就一樣

2.3 String s1="123" String s2="1"  String s3=s2+"23" 雖然s3和s1內容一樣 但是比較會拋出false,因爲編譯器在編譯期間無法確定s2的值,所以會分配新地址給s3, 所以比較地址時就不一樣

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