为何String要设计成不可变的?

1. 字符串常量池的须要面试

字符串常量池(String pool, String intern pool, String保留池) 是Java堆内存中一个特殊的存储区域, 当建立一个String对象时,假如此字符串值已经存在于常量池中,则不会建立一个新的对象,而是引用已经存在的对象。倘若字符串对象容许改变,那么将会致使各类逻辑错误,好比改变一个对象会影响到另外一个独立对象. 严格来讲,这种常量池的思想,是一种优化手段.缓存

2. 容许String对象缓存HashCode
Java中String对象的哈希码被频繁地使用, 好比在hashMap 等容器中。字符串不变性保证了hash码的惟一性,所以能够放心地进行缓存.这也是一种性能优化手段,意味着没必要每次都去计算新的哈希码.安全

3. 安全性
String被许多的Java类(库)用来当作参数,例如 网络链接地址URL,文件路径path,还有反射机制所须要的String参数等, 倘若String不是固定不变的,将会引发各类安全隐患。性能优化

 整体来讲, String不可变的缘由包括 设计考虑,效率优化问题,以及安全性这三大方面. 事实上,这也是Java面试中的许多 "为何" 的答案。网络

转载连接:性能

https://blog.csdn.net/renfufei/article/details/16808775优化

相关文章
相关标签/搜索