StringBuilder类


StringBuilder类

我们已经知道String支持 + 和 +=,在实际使用中,如果多次出现这种写法,会比较浪费时间,因此编译器会对其进行优化,这是通过StringBuilder实现的

用途

StringBuilder是专门用于构造字符串的,创建以后里面的内容是可变的。我们可以使用它来对字符串进行拼接、裁剪等操作,它就像一个字符串编辑器,弥补了字符串不能修改的不足

定义

StringBuilder builder1 = new StringBuilder(); //一开始创建时为null
StringBuilder builder2 = new StringBuilder("abc");

使用

append!

在字符串后面添加字符串,类似于C中的push_back

StringBuilder builder = new StringBuilder();
builder.append("Hello");

delete

删除范围内的字符串 (int start , int end)这里指的都是下标

deleteCharAt

删除某个下标对应字符

insert

在某个下标对应的位置前面插入一个字符(串)

reverse!

对字符串进行翻转

toString

将StringBuilder变回String

此外,该类中也支持String类中的所有方法,这是因为编译器执行了toString方法,将StringBuilder类转换为了String类

链式调用

StringBuilder类支持链式调用(类似于C中的cout<<”dwa”<<a;)

当我们在调用一个方法时,不需要用变量接收它的结果,可以继续调用其他方法

概念

链式调用的基本结构是,一个方法返回对象本身,这样你就可以在这行代码之后继续调用该对象的其他方法,式调用的实现依赖于每个方法返回对象自身(this),这样可以在一个语句中连续调用多个方法。

因此,可以有这种写法:

StringBuilder builder = new StringBuilder();
builder.append("Hello").append(" World");

字符串拼接的底层原理

  • 拼接的时候没有变量,都是字符串

此时会触发字符串的优化机制,在编译的时候就已经是最终的结果了

String str = "a" + "b" + "c";
  • 拼接的时候有变量参与

JDK8以前会使用StringBuilder

  • 源码分析
  1. 默认创建一个长度(capacity)为16的字节数组
  2. 添加的内容长度(length)小于16,直接存
  3. 添加的内容大于16会扩容(16*2+2 = 34)
  4. 如果扩容之后还不够(>34),以实际长度为准

Author: havenochoice
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source havenochoice !
评论
  TOC