张小飞的Java之路——第二十章——StringBuffer

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?


1. StringBuffer

张小飞:StringBuffer——是什么东西?

诸小亮:这是字符串缓冲区,其实就是一个字符容器

张小飞:。。。。。。,说人话

诸小亮:你可以这样认为,它是可变字符串

1. 介绍

张小飞:之前不是说,字符串不可变吗?

诸小亮:那是 String,现在是 StringBuffer,它的主要特点:

  • 长度可以变化
  • 通过指定方法可以修改内容

示例:

public static void main(String[] args) throws Exception {
    //1. 创建对象
    StringBuffer str = new StringBuffer();
    //2. 添加内容,append 可以多次调用,而且执行 append 跟字符串常量池没关系
    str.append("a").append(2).append('c').append(3.14);
    //3. 转换为字符串
    System.out.println(str.toString());
}

结果:image.png

张小飞:注释上说‘append 跟字符串常量池没关系’是什么意思?

诸小亮:就是执行 append 方法后,并不会在字符串常量池中添加字符串

张小飞:哦,原来是这个意思,那什么时候才会有字符串呢?

诸小亮:调用 toString 后,才会真正的把 StringBuffer 转换为一个 String

注意:在执行 System.out.println(str.toString()); 之前,常量池中是没有a2c3.14这个字符串的

2. 常用方法

诸小亮:来看一下它都有哪些常用的方法

1. append

append:尾部追加内容,参数可以是各种类型的数据,比如:

image.png

2. insert

insert:在指定位置插入内容

image.png

结果:image.png

可以认为是在第 n 个字符后插入内容

3. delete

delete:删除指定范围内的子串

image.png

结果:image.png,包含头下标0,不包含尾下标2

4. deleteCharAt

deleteCharAt:删除指定位置上的字符

image.png

结果:image.png

5. replace

replace:替换指定范围的子串

image.png

结果:image.png

6. reverse

reverse:反转

image.png

结果:image.png

7. charAt

charAt:返回指定位置的字符

image.png

结果:image.png

3. 原理

张小飞:StringBuffer 具体是如何让 ‘字符串可以变化’的呢?

诸小亮:StringBuffer 对象中维护了一个可变数组,在执行 append 方法时只是往数组中添加内容,所以。。。

张小飞:可变数组?数组的长度也可以改变?

诸小亮:数组的长度不可变,‘可变数组’就是创建一个新的数组,把老的内容复制过来,再加上新的内容

张小飞:原来如此

诸小亮:所以,StringBuffer 让字符串可变的原理大概是这样的
image.png

诸小亮:在调用 toString() 方法时,就把 数组中的内容转换为字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值