String、StringBuilder、StringBuffer的方法详解和三者的区别与联系(3)

经过前两篇的介绍,终于把String类的所有能用到的构造方法和常用成员方法都介绍了一遍。

终于开始了重点:可变的字符串:StringBuilder、StringBuffer

在使用上,两者的方法和用法都是一样的。其中的差别我们来分析一下:

  • 共同点:都是字符串的缓冲区,都是字符串的生成器,都是可变的字符序列。
  • 不同点:

出现版本不同      :     StringBuffer 1.0

                                    StringBuilder 1.5

线程安全不同      :     StringBuffer是线程安全的

                                    StringBuilder是线程不安全的

效率不同           :       StringBuilder 效率较高

                                    StringBuffer 效率较低


字符串缓冲区StringBuilder

概述:

  • StringBuilder是一个可变的字符序列,因为在类中提供了修改私有成员变量的方法。常用的方法是append和insert,就是在StringBuilder对象本身上,进行修改操作。
  • StringBuilder底层和String类型一样,也是维护了一个字符数组,数组是私有的,外界无法直接访问,因此在StringBuilder或者String中对数组进行操作的公有方法的封装。
  • String类型和StringBuilder的关系:都是用于描述字符串。
  • String是不可变的字符序列,没有提供修改私有成员的方法;StringBuilder是可变的字符序列,因为提供了修改成员变量的方法;
  • String长度本身也不可以变化,StringBuilder长度可以变化,可以认为StringBuilder就像一个可以伸缩的容器,用于存储字符。

我们可以看到名字:字符串缓冲区,那么什么是缓冲区呢,就像是我们的水杯一样,我们接水的水龙头只能一滴一滴的接,但是我们不能等到渴的时候去等着水龙头一滴滴的喝,所以我们拿一个水杯放在那里,等我们渴了就去喝水杯里积攒的水一样。那么我们还要考虑的问题又多了起来,水杯的容量要多大呢,水杯接满了怎么办,水杯里的水喝完了怎么办?这些问题都会有相应的初识设置和方法来解决。

 

构造方法:

代码示例:

	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		System.out.println(sb);
		StringBuilder sb1 = new StringBuilder(30);
		System.out.println(sb1);
		StringBuilder sb2 = new StringBuilder("adfds");
		System.out.println(sb2);
	}


adfds

(这里只示例三种,另外一种不太常用)这里可以看出上面的两种都没有赋值,都还是空串,第三个有了内容。
这里前两种构造方法里说的容量,就像是上面比喻的水杯的容量一样,提供一个大小差不多的杯子来接水。这里初始化提供的是16容量的大小。


成员方法:

添加功能:

  • append(任意类型):可以将任意数据类型,转成字符,添加到生成器中
  • insert(int index, 任意数据类型):可以将任意数据类型,添加到指定的位置

说明:1、index的范围是0~当前缓冲区的大小;2、插入数据之后,数据本身的索引就是参数中指定的index

这里的两个方法都有很多的重载方法,因为太多,就不一一列举了,可以自行去API文档中查看练习。

public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		sb.append("aaaaaaa");
		System.out.println(sb);
		sb.insert(3, "bbbbb");
		System.out.println(sb);
		
	}
aaaaaaa
aaabbbbbaaaa

删除功能

  • deleteCharAt(int index) :删除指定索引的字符
  • delete(int start, int end):删除指定范围的字符,被删除的部分包含头不包含尾
public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		sb.append("12345678");
		System.out.println(sb);
		sb.deleteCharAt(0);
		System.out.println(sb);
		sb.delete(3, 4);
		System.out.println(sb);
	}
12345678
2345678
234678

 

替换和反转功能

  • replace(int start, int end ,String str):将字符串缓冲区中的从start开始到end-1这部分内容,替换成str
  • reverse():将原有字符序列进行反转
	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		sb.append("12345678");
		System.out.println(sb);
		sb.replace(1, 5, "abc");
		System.out.println(sb);
		sb.reverse();
		System.out.println(sb);
	}
12345678
1abc678
876cba1

String和StringBuilder拼接字符串的区别

使用String类型拼接字符串:时间和空间上都非常浪费。

  1、创建一个StringBuilder的存储空间,大小为第一个字符串的长度+16(第一个对象)

  2、将第一个字符串添加到缓冲区中

  3、将第二个字符串添加到缓冲区中

  4、将缓冲区对象转成字符串对象(创建了一个新的字符串对象)(第二个对象)

   5、返回该字符串对象

使用StringBuilder拼接字符串:时间和空间上都非常节省,无论循环多少次,都只创建两个对象。

  1、创建一个新的StringBuilder的存储空间

2、在StringBuilder的基础上进行添加,不创建新的字符串

3、循环完成后,将StringBuilder转成String


String和StringBuilder的相互转换

String转成StringBuilder

  1、StringBuilder的构造方法

  2、append方法

StringBuilder转成String类型

  1、toString的方法

  2、使用String的构造方法


大概到这里,三者的区别和联系相信已经博友们已经有大概的了解了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值