String的不可变性是Java语言中一个非常重要的设计特性,其意味着一旦String对象被创建,它的值就不能被改变,我们所有的修改String值的操作实际上是新建了一个String,然后将新的String覆盖了旧的String,而原始String对象的内容始终保持不变。
Java在设计String时,将其设计为final类,即防止其被继承和重写方法,这是由于String在日常中使用次数多,为了防止出现一些安全性问题(如SQL注入、文件系统访问等问题),同时也是为了保证其线程安全。
我们可以通过比较哈希码来直观的看一下String的不可变问题:


可以看到2次的哈希值不同,这说明其是不同的String对象,而由于我们每次修改String对象都是新建一个对象再将其覆盖,这导致其修改的性能较低。


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



