String/StringBuffer/StringBuilder对比
java当中的字符串涉及到三个类String、StringBuffer和StringBuilder,他们特点不同,使用的场景也不同。
一 类图
首先看看这是三个类在JDK中的类关系。
二 底层实现
String类的底层实现是static final char[ ] value,也就是说String字符串是存在一个char数据中的,static说明value是类变量,final则规定了value之不可变
StringBuffer 和 StringBuilder 的底层都是char[ ] value数组
三 线程安全性
因为String类的字符串值存在常量池不可进行修改,所以认为String类是线程安全的
StringBuffer类是线程安全的,他的方法都是synchronized关键字修饰的
StringBuilder类是线程不安全的
四 执行速度
这三个类在进行操作时的速度关系为:StringBuilder > StringBuffer > String
由于String中进行操作时都会新建一个char[ ]数组代替原来的char[ ]数组,所以速度最慢
StringBuffer线程安全,每个方法都有synchronized同步阻塞,所以操作速度受影响
StringBuilder没有同步阻塞的限制,所以操作速度最快
五 使用场景
如果要操作少量的数据用 = String
单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
六 常用方法
String都比较熟悉,这里只整理StirngBuffer/StringBuilder类的方法,这两个类大多数方法都是继承于AbstractStringBuilder父类
1、append(String str) 追加内容到当前StirngBuffer/StringBuilder对象的末尾,类似于字符串的连接
2、deleteCharAt(int k)删除指定位置的字符,然后将剩余的内容形成新的字符串
3、delete(int start, int end) 删除指定区间以内的所有字符,包含start,不包含end索引的区间
4、insert(int index, String str) 在StirngBuffer/StringBuilder对象指定位置中插入内容str,然后形成新的字符串
5、reverse() 将StirngBuffer/StringBuilde对象中的内容反转,然后形成新的字符串
来源:****
原文:https://blog.****.net/m0_37241851/article/details/71056290