浅谈String不变类

在Java中,String这个类比较常见,也比较特殊,它特殊就在于它是一个不可变类。

所谓不可变类,是指一旦创建了实例对象,它的内容是不允许修改的(修改之后返回的是一个新的对象,就把它称为不可修改)。

原因:

这里就涉及到字符串常量池,为了减少在jvm中创建字符串的数量,字符串类便有了字符串常量池的存在,它是Java堆内存的一个特殊储存区域。

当创建String对象时,首先会检查字符串常量池中是否存在该字符串,如果存在,便直接引用,反之,则创建一个新的字符串放入池中。

了解了字符串常量池之后,就不难理解为什么String是不可变类了,

在字符串常量池中,一个字符串对象可能被很多个变量引用,这时候如果一个引用对字符串进行了修改,会导致其他引用也会发生变化,就会产生错误,因此将String设置为不可变类。

缺点:

不可变类的一个缺点就是,每次在对象进行修改时,都会新建一个对象,浪费内存。

解决办法:

在Java中,为了解决这个问题,有stringbuffer和stringbuilder类,它是字符串动态数组,可直接对字符串进行修改处理。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容