区别与联系
StringBuilder 是一个可变的字符序列。它继承于AbstractStringBuilder,实现了CharSequence接口。
StringBuffer 是一个线程安全的可变的字符序列。它继承于AbstractStringBuilder,实现了CharSequence接口。
StringBuilder和StringBuffer不同,前者是非线程安全的,后者是线程安全的。
相比String有一个reverse()方法
这两个的方法基本相同,只是一个有synchronized
的安全,一个没有;AbstractStringBuilder
是StringBuilder
与StringBuffer
的公共父类,定义了一些字符串的基本操作,如expandCapacity
、append
、insert
、indexOf
等公共方法。下面介绍一个这些常见的公共方法,以StringBuilder
为例:
insert
1 | StringBuilder sbuilder = new StringBuilder(); |
append
1 | StringBuilder sbuilder = new StringBuilder(); |
replace
1 | StringBuilder sbuilder; |
delete
1 | StringBuilder sbuilder = new StringBuilder("0123456789"); |
index
1 | StringBuilder sbuilder = new StringBuilder("abcAbcABCabCaBcAbCaBCabc"); |
剩下的API
1 | StringBuilder sbuilder = new StringBuilder("0123456789"); |
总结:和String类相比,有一个reverse()方法,有一个追加字符串,还有一个对追加长度的计算,capacity
相当与String中的类。
insert和append,理论上来说,一个是在前面添上元素,一个是在后面添上元素。作用感觉只要一个就好了。
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。
抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。
如果想了解更多关于capacity
容器的增加,可以看看另一篇关于它的文章。
参考文章: