1.string的不可變性
比如第一次賦值「abc」,第二次賦值「abcd」,不是在原記憶體位址修改資料,而是重新指向乙個新位址、新物件
2.string為什麼不可變
開啟jdk原始碼
final修飾的string,代表了string的不可繼承性,final修飾的char代表了被儲存的資料不可更改性。但是:雖然final代表了不可變,但僅僅是引用位址不可變,並不代表了陣列本身不會變
3.stringbuffer是在原來記憶體位址的基礎上修改資料
比如下面這種 string s作為引數傳遞是引用傳遞 但是因為操作方式的不同 string相加會產生新的物件 不會對原物件進行修改 所以傳入s以後 s值並沒有改變
用stringbuffer的話 作為引用傳遞 修改的是原物件的記憶體位址 所以原來的s值也被修改了
描述的可能有些不是很準確 僅供參考
String類為什麼是final的
首先我們使用new建立乙個string物件的時候比如 string str new string 123 這句話裡面建立了兩個物件,第乙個在系統中建立了乙個 abc 這個字串 然後在創乙個str物件,然後在讓 123 這個字串的引用 創乙個string物件相當於創了兩個。在說說為啥string類設定...
String類為什麼是final修飾的
總的來說是為了效率和安全 字串專門有個字串池,也只有用final修飾才能實現字串池 常量池的存在 沒有new 關鍵字的string物件產生時就會儲存到字串常量池,當有同樣的內容的string物件產生時,將不再新建物件,節省了堆空間記憶體,注 string的內容無法改變,引用可改變 這樣在大量使用字串...
String為什麼是final
1.可以快取 hash 值 因為 string 的 hash 值經常被使用,例如 string 用做 hashmap 的 key。不可變的特性可以使得 hash 值也不可變,因此只需要進行一次計算。2.string pool 的需要 如果乙個 string 物件已經被建立過了,那麼就會從 strin...