StringBuilder
引言: StringBuilder
StringBuilder
为什么要有StringBuilder
我们先不学习StringBuilder,先来思考一个问题:为什么Java要引入这么一个类呢?
看以下代码
1 | String str = 1 + "2" + 3; |
这一行代码,会产生 "12"
、"123"
两个字符串对象
,但是我们"12"
其实并不是我们需要的,他是Java创建的临时对象,浪费内存,还会浪费GC(Java垃圾清理)效率
为了高效的提高直接拼接字符串的效率,所以java提供了StringBuilder这个类
如果我们使用StringBuilder
这个类,在运行上面代码时,不会创建新的临时对象了
jdk api 官方说明:
This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.
构造方法
1 | StringBuilder() |
常见方法
StringBuilder的常用方法主要有两个,他们都有多个重载方法,匹配了各种各样的数据类型
- apped
- insert
apped
例如1
2StringBuilder append(String str)
//添加一个字符串到调用字符串的末尾append方法可以链式调用1
2StringBuilder sb = new StringBuilder("你好");
System.out.println(sb.append("晚安"));//你好晚安1
2
3
4
5StringBuilder sb = new StringBuilder("你好");
sb.append("晚安")
.append("去哪儿")
.append(1);
System.out.println(sb);//你好晚安去哪儿1
补充:链式调用
实现链式调用的秘诀在于返回自身,我们也可以实现一个可以链式调用的方法
1 | public class Chain { |
insert
1 | StringBuilder insert(int offset, String x) |
例子:
1 | StringBuilder sb = new StringBuilder("你好"); |
insert同样可以链式编程
值得注意的是,sb.append(x)
和sb.insert(str.length(), x)
其实作用是相同的
1 | StringBuilder sb1 = new StringBuilder("你好"); |
其他方法
1 | StringBuilder delete(int start, int end) |
知识来源:
廖雪峰博客
及 官方api文档