-StringBuilder
-
java.lang.StringBuilder
-
String的优化措施仅照顾重用性,因此频繁修改字符串会带来内存开销大,运行效率差的结果。对此,java提供了一个专门用于修改字符串的API
-
其内部维护一个可变的char数组,所有的修改都是在这个数组中进行的因此开销小,性能好,并且其提供了便于修改字符串的一系列方法,包括了:增,删,改,插等基本操作
append()增
public class StringBuilderDemo {
public static void main(String[] args) {
String str = "好好学习java";
StringBuilder builder = new StringBuilder(str);
builder.append(",为了找个好工作");
System.out.println(str); //好好学习java
// 获取StringBulider内部的字符串
str = builder.toString();
System.out.println(str); //好好学习java,为了找个好工作
}
}
- append(参数)
- 参数:增加的内容
replace()改
public class StringBuilderDemo {
public static void main(String[] args) {
String str = "好好学习java,为了找个好工作";
StringBuilder builder = new StringBuilder(str);
builder.replace(9, 16, "就是为了改变世界");
System.out.println(builder.toString()); //好好学习java,就是为了改变世界
}
}
- builder.replace(参数1.参数2,参数3)
- 参数1:修改的起始位置
- 参数2:修改的末尾位置
- 参数3:修改后的内容
- 参数1、参数2,含头不含尾
delete()删
public class StringBuilderDemo {
public static void main(String[] args) {
String str = "好好学习java,为了找个好工作";
StringBuilder builder = new StringBuilder(str);
builder.delete(0, 8);
System.out.println(builder.toString()); //,为了找个好工作
}
}
- delete(参数1,参数2)
- 参数1:删除的起始位置
- 参数2:删除的末尾位置
- 参数1、参数2,含头不含尾
insert()插
public class StringBuilderDemo {
public static void main(String[] args) {
String str = "好好学习java,为了找个好工作";
StringBuilder builder = new StringBuilder(str);
builder.insert(0, "活着");
System.out.println(builder.toString()); //活着好好学习java,就是为了改变世界
}
}
- insert(参数1,参数2)
- 参数1:插入的起始位置
- 参数2:插入的内容
-Stringbuffer
Stringbuffer 和 Stringbuilder是功能一样
区别:
只不过StringBuilde用于多个线程是不安全的,StringBuffer用于多个线程是安全的
String 和 StringBuffer 的区别
由于String类是不可变的,当他要增加或删除字符串时,会重新创建一个字符串,会对存储空间
造成浪费,而 StringBuffer是可变的,所以对字符串进行增删改时,可以用 StringBuffer
- String 实现了 equals 方法,new String(“abc”).equals(newString(“abc”)的结果为 true
- StringBuffer 没有实现 equals ,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)
的结果为 false。