探究 Java 字符串的不可变性与内部机制
为什么String是不可变的
其实String不可变的原因是因为内部char[]被final修饰了,
其实String里的内部hash value也是一个私有的final整形存放hashcode,这么做的原因主要为了提高后续hash操作的性能。
不提供修改方法:所有的substring concat这方法都是创建一个新的字符串
这么做主要实现
**线程安全性:**由于string是不可变的,他可以被多个线程安全的共享,不用担心并发修改带啦爹安全问题
安全性: 确保了字符串创建后不会被修改,这样设计主要防止意外情况修改,可以让我们在程序不同地方传递更加安全。
缓存: 字符串常量池缓存字符串可以提高性能
hash值的安全性: 这意味着可以安全的作为我们hash table的key,如果是可变的,那么修改后字符串可能导致hash值的变化。
String的内部实现
从实现原理角度来看,String内部使用char[]数组来存储字符串内容。这个char[]实在字符串创建的时候初始化的, 一旦创建后,大小就不会在发生变化。