java基础系列------string为什么设计为不可变的

本系列第二篇,依旧是尝试阅读外网上的java基础文章,尽管有的地方没太读懂,但依旧收获了一些之前没有注意到的知识点,按照惯例记录一下。

字符串是存储在字符串池中的,而字符串池是存储在方法区(看有的帖子说方法区这东西随着版本升级被优化了...呃...)中的(这个之前一直不知道,提升了一点点基础知识的深度还挺有意思的)。然后讲了一些之前了解过的东西,当一个字符串已经存在于字符串池中,而程序又要再创建一个相同的字符串时,会将已存在的字符串引用返回,而不会真的创建一个新的字符串。简单来说就是内容相同的字符串,可以被复用

所以说,很有可能多处代码都使用到了一个相同的字符串对象,如果字符串可以被改变,那么很有可能会造成bug。

然后,又讲到了关于hashcode的使用,设计为不可变的,那么就不必担心hashcode被改变,也就不必每次使用时都重新计算一遍,提升了程序的性能。

(下一点聊到了关于set的设计,这一段感觉实在是没太看懂,主要是单词不认识...暂时略过...)

字符串在java中作为参数是一件很常见的事情,网络连接、打开文件等等,如果设计为可变的,将会导致严重的安全隐患。

字符串由于具备不可变性,所以可以放心地让多线程共享而不必担心线程安全问题。

最终在文章末尾总结,将字符串设计为不可变的,是出于性能和安全两方面原因。

posted @ 2020-09-21 10:38  无心大魔王  阅读(113)  评论(0编辑  收藏  举报