为什么Java中的String类型是immutable的?最一开始我的想法是可能是效率问题,类似Python里面对小整数和字面值常量的处理,后来Google了一下发现里面大有文章,最主要的几点是:
- 同步:在面对多线程任务的时候,将String设置成immutable的,就可以避免在运行中被修改,这使得在多线程环境中避免麻烦的同步问题。
- 效率:在Java中存在字符串缓冲池,如果一个字符串字面量在缓冲池中存在,那么当再次使用相同的字符串字面量的时候,缓冲池中的将被重复使用,从而带来效率的提升,而如果设置成mutable的,那么将导致无法重用。此外,在HashMap等数据结构中,字符串也常常用作key值来存储,如果是immutable的话,hash值只需要计算一次然后就可以缓存起来,下次直接使用,而如果不是immutable的话,会导致hash值的改变。
- 安全:文件操作,网络操作和内存管理通常使用String来进行,如果String不是immutable的话,很多属性可能会被恶意的修改。
- 简单:容易上手......
其中,最重要的也就是同步了,而且这是immutable类型的共同特点,在很多书籍以及Oracle的官方文档中,也鼓励程序员使用immutable。
没有评论:
发表评论