String 为何要设计成不可变的

String不可变:String值储存在常量池中。一个已有字符串"abcd",若是改变值成"abcedl",不是在原内存地址上修改数据,而是在常量池中查找或生成这个新值,再把引用指向新值的地址,如图: 数据库

为何不可变

  1. String 类自己是final的,不能够被继承
  2. String类内部经过private final char value[]实现,从而保证了引用的不可变和对外的不可见
  3. String内部经过良好的封装,不去改变value数组的值

为何要设计成不可变

1. 安全性

  1. 线程安全,不可变天生线程安全
  2. String常被用做HashMap的key,若是可变会引有安全问题,如两个key相同
  3. String常被用做数据库或接口的参数,可变的话也会有安全问题

2. 效率

  1. 经过字符串池能够节省不少空间
  2. 每一个String对应一个hashcode,再次使用的话不用从新计算

扩展

能够用反射来改变String中value的值,因此严格意义上说不必定不可变数组

参考资料

如何理解 String 类型值的不可变安全

解读不可变的String线程

相关文章
相关标签/搜索