String的不可变指的是
- String内部是使用一个被final修饰char数组value存储字符串的值
- 数组value的值在对象构造的时候就已经进行了赋值
- String不提供方法对数组value中的值进行修改
- String中需要对value进行修改的方法(例如replace)则是直接返回一个新的String对象 所以String是不可变的。
为什么String设计成不可变的
- 字符串常量池的需要,提升效率和减少内存分配
- 安全性考虑,防止被意外修改
- HashSet中存的值如果是可变的String,则破坏了唯一性;
- 不可被写所以线程安全;
- 因为不可变的设计,jvm底层很容易在缓存String对象的时候缓存其hashcode,这样在执行效率上会大大提升

被折叠的 条评论
为什么被折叠?



