String 為什麼要設計成不可變的

2021-09-11 13:27:50 字數 584 閱讀 4834

string不可變:string值儲存在常量池中。乙個已有字串"abcd",如果改變值成"abcedl",不是在原記憶體位址上修改資料,而是在常量池中查詢或生成這個新值,再把引用指向新值的位址,如圖:

string 類本身是final的,不可以被繼承

string類內部通過private final char value實現,從而保證了引用的不可變和對外的不可見

string內部通過良好的封裝,不去改變value陣列的值

1. 安全性

執行緒安全,不可變天生執行緒安全

string常被用作hashmap的key,如果可變會引有安全問題,如兩個key相同

string常被用作資料庫或介面的引數,可變的話也會有安全問題

2. 效率

通過字串池可以節省很多空間

每個string對應乙個hashcode,再次使用的話不用重新計算

可以用反射來改變string中value的值,所以嚴格意義上說不一定不可變

如何理解 string 型別值的不可變

解讀不可變的string

String為什麼要設計成final

strings are constant their values cannot be changed after they are created.string buffers support mutable strings.because string objects are immutable...

String為什麼要設計成final

strings are constant their values cannot be changed after they are created.string buffers support mutable strings.because string objects are immutable...

String類為什麼被設計成不可變類

1.共享元素模式,也就是說 乙個系統中如果有多處用到了相同的乙個元素,那麼我們應該只儲存乙份此元素,而讓所有地方都引用這乙個元素。2.j a中string就是根據享元模式設計的,而那個儲存元素的地方就叫做 字串常量池 string pool public class public static vo...