浅谈String不变类

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值