String、StringBuild、StringBuffer


一、String的基本特征

  • 被声明为final类,内部变量亦被final修饰
  • 典型的Immutable(不可变)类
  • 字符串常亮缓存

在这里插入图片描述
hash可能需要被重新计算,所以没有被设置为final。

值一旦确立之后,在内存上就不会被改变了。删除添加的操作字符串操作都是新建了一个字符串,不是原来的字符串了。
被设置为Immutable类还有一个好处,字符串会存在字符串常量池,用到同一个字符串时不会创建新的字符串,可以直接引用到常量池里面的字符串,节省资源和开销。

二、String的引申说明

在这里插入图片描述

String对象是否真的不可变?

在这里插入图片描述
可以通过反射去改变String对象的值,不让他创建新的对象。

三、StringBuffer与StringBuilder

  • 实现原理基于可修改的char数组,默认大小16
  • 都继承自AbstractStringBuilder
  • StringBuffer线程安全,StringBuilder非线程安全

在这里插入图片描述
容量不够会申请一个更大的内存空间,把字符串复制过去,新追加的字符串追加到后面,直到容量不够再次扩容。
新申请一块扩容一倍的内存块。

应用场景

String:在字符串内容不经常发生变化的业务场景优先使用String类
例如:常量声明、少量的字符串拼接操作等。
StringBuffer:在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在多线程环境下
例如:XML解析、HTTP参数解析与封装。
StringBuilder:在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在单线程环境下
例如:SQL语句拼装、JSON封装等。

总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值