前言
本篇文章介绍了StringBuilder和StringBuffer的一些基本的概念,结合我自身的理解谈谈这两个对象。在这里我旨在用最浅显的语言介绍这两个对象。
StringBuilder
StringBuilder产生的背景
首先我们知道,如果使用String字符串拼接,比如“abc” +"def",诚然给我们带来了很大的便利。但是!其产生了一个十分重要的后果。就是每次连接字符串都会产生新的String对象,这样带来了低效率的后果。因此,这个时候StringBuilder就出现了。
StringBuilder是什么?
StringBuilder是一个类,其具有String类所不具备的一些方法。它的出现很好的解决了String拼接带来的低效率问题。
其在内存的布局如下。首先stringbuilder引用指向了堆区中的new StringBuilder()对象。常量池中存的是字符串“abc”。但是在new StringBuilder()对象取出了常量池中的“abc”,然后有一个数组存放了abc。接着stringbuilder的所有操作都是对这个数组进行操作了。返回的都是this这个对象。并不会产生其他的String对象了。
因此我们可以说String不可变,但是StringBuilder和StringBuffer是可变的。
StringBuilder的方法
StringBuilder的方法有很多。常见的方法有:
StringBuff append(String str)
在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、 double、float、int、long、Object、String、StringBuff的变量
例如如下代码。用append追加了不同类型的数据。
public class Test {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder("abc");
stringBuilder.append("123").append(10);
System.out.println(stringBuilder);
}
}
结果如下所示:
StringBuffer
StringBuffer是StringBuilder的前身。这两个类大致相同。 StringBuffer效率稍有些低,但允许采用多线程的方式执行添加或删除字符的操作。当然如果所有字符串在一个单线程中编辑 ,则应该用 StringBuilder 替代它。 这两个类的 API(Application Programming Interface,应用程序编程接口)是相同的。