浅谈String不变类

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

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

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

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

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

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

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

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

你可能感兴趣的:(Java,java,开发语言)