【String】【面试题】String为什么要背设计成为不可变的
问题
String为什么要背设计成为不可变的
分析
主要是从性能和安全两方面考虑
性能考虑:
1.字符串常量池的需要
字符串常量池的存在就是为了性能优化,将常用的字符串缓存在常量池中,避免多次创建新对象,减少JVM内存占用,如果字符串是可变的,那么常量池就没有意义了,类似的缓存技术,有Integer缓存了-128-127的范围的常用数字
2.hashCode缓存的需要(这个不太理解)
因为字符串不可变,所以在它创建的时候 hashcode 就被缓存了,不需要重新计算。这就使得字符串很适合作为 HashMap 中的 key,效率大大提高。
安全考虑:
1.多线程安全
多线程中,可变对象的值很可能被其他线程改变,造成不可预期的结果。而不可变的 String 可以自由在多个线程之间共享,不需要同步处理。
参考:https://blog.csdn.net/tacot/article/details/114803332