1.字符串不變性
字符串常量池 ?是Java堆內(nèi)存中一個(gè)特殊的存儲(chǔ)區(qū)域, 當(dāng)創(chuàng)建一個(gè)String對(duì)象時(shí),假如此字符串值已經(jīng)存在于常量池中,則不會(huì)創(chuàng)建一個(gè)新的對(duì)象,而是引用已經(jīng)存在的對(duì)象
String s = "sadas";
String s1 = "sadas";
當(dāng)要改變 s1的對(duì)象值時(shí) ? 會(huì)看一下內(nèi)存中是否有與其相等的對(duì)象 如果沒(méi)有 會(huì)在內(nèi)存中重新創(chuàng)建一個(gè)對(duì)象不會(huì)改變?cè)瓉?lái)的對(duì)象骏啰。 一個(gè)引用 不能同時(shí)指向兩個(gè)對(duì)象癣诱。
字符串不變性的原因。
1).如果字符串是可變的話,當(dāng)兩個(gè)引用指向同一個(gè)對(duì)象時(shí) 改變另一個(gè)字符串變量劫窒,就會(huì)使另一個(gè)字符串變量指向錯(cuò)誤的值苛秕。
2).字符串 經(jīng)常作為網(wǎng)絡(luò)連接和數(shù)據(jù)庫(kù)連接 ? 不可變的話 就確保了連接的安全性城看。
3).緩存字符串hashcode碼的需要 字符串的hashcode是經(jīng)常被使用的潘飘,字符串的不變性確保了hashcode的值一直是一樣的,在需要hashcode時(shí)瘤袖,就不需要每次都計(jì)算衣摩,這樣會(huì)很高效。