StringBuilder类简介
(1)StringBuilder 最早出现在JDK1.5,是一个字符拼接的工具类,它和StringBuffer一样都继承自父类AbstractStringBuilder, 在AbstractStringBuilder中使用char[] value字符数组保存字符串,但是没有用final关键字修饰,所以StringBuilder是可变的。
(2)……
性能
StringBuilder 对字符串的操作是直接改变字符串对象本身,而不是生成新的对象,所以新能开销小。
与StringBuffer相比StringBuilder的性能略高(15%~30%),StringBuffer为保证多线程情况下的安全性(synchronize加锁)而牺牲了性能,以时间来换取安全。而StringBuilder则没有保证线程的安全,从而性能略高于StringBuffer。
使用场景
频繁使用字符串拼接的时候可以用StringBuilder(推荐)或者StringBuffer。
StringBuilder对象的创建
-
常规创建
StringBuilder builder = new StringBuilder();
-
在创建的时候添加初始字符串
StringBuilder builder = new StringBuilder("abc");
-
在创建的时候添加初始长度
StringBuilder builder = new StringBuilder(初始长度);
StringBuilder方法 – 可以作为栈来使用!
builder.length();
builder.append(str);
// 追加数据;
builder.append(c);
// 追加数据;
builder.insert(offset, str);
// 向指定位置插入数据;
builder.insert(offset, c);
builder.setCharAt(i, c);
builder.deleteCharAt(i);
// 删除指定位置的数据;
builder.delete(beginIdx, endIndex);;
// 删除指定范围的数据[startIdx, endIdx-1]
;
builder.toString();
//将对象中的数据以字符串的形式返回;
builder.reverse();
// 将对象中的数据反转;
//Java StringBuilder
builder.append("just"); //在加入新字符串时,不会在内存中新开辟字符串空间,只是给原有的字符串尾部加入新字符串
builder.insert(0, "you");
builder.deleteCharAt(index);
builder.delete(beginIdx, endIndex); //删除[startIdx, endIdx-1]的内容,并返回this
builder.toString();
builder.reverse();
builder.delete(0, deleteMethod.length()); // StringBuilder清空!
builder.setLength(0); // 更优!
附录:《Java核心技术 卷I》11版 p54
StringBuilder(): 构造一个空的字符串构建器。
int length(): 返回构建器或缓冲器中的代码单元数量。
StringBuilder append(string str): 追加一个字符串,并返回this。
例如:res.append(str[2] + '-');
StringBuilder append(char c): 追加一个代码单元,并返回this。
StringBuilder appendCodePoint(int cp):
void setCharAt(int i, char c):
StringBuilder insert(int offset, String str):
StringBuilder insert(int offset, char c):
StringBuilder delete(int startIdx, int endIdx):
String toString():
————
// 下面哪里出错了?
StringBuilder str1 = "aaaaa";
str1.charAt(0) = Character.toUpperCase(str1.charAt(0));
在这段代码中,出错的地方是StringBuilder str1 = "aaaaa";
。因为"aaaaa"
是一个字符串常量,不能直接赋值给StringBuilder
类型的变量。
StringBuilder str1 = new StringBuilder();
str1.append("aaaaa");
str1.setCharAt(0, Character.toUpperCase(str1.charAt(0)));