StringBuilder:
1、String 拼接时,底层会优化成 StringBuilder 通过 append() 方法来进行,因为 append() 不会产生新的对象。
sb1.append("我是字符串").append("我还是字符串");
//(sb1已经通过 Builder new 出来了,下文皆同)
String str1 = "12345";
str1 = str1 + "上山打老虎";
//普通的String拼接底层会优化为StringBuildr:
StringBuilder sb1 = new StringBuilder();
sb1.append("12345,");
sb1.append("上山打老虎。");//append不会产生新的一个对象
System.out.println(sb1);
sb1.append("老虎打不过,").append("打着了小松鼠。");
System.out.println(sb1);
2、字符串内部循环时,尽量使用 StringBuilder 或 StringBuffer
//内部循环:
String str2 = "门前大桥下游过一群鸭";
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 10; i++){
sb2.append(i);
}
str2 = str2+sb2.toString();
System.out.println(str2);
StringBuffer:
1、2B(StringBuilder & StringBuffer,下文皆同)功能几乎相同。
2、2B 常用部分功能:
(1)字符串翻转:
sb.reverse();
(2)删除指定范围的字符串:
sb.delete(2,6);
注:其中2表示起始下标,6表示结束下标。[ )
(3)插入指定范围的字符串:
sb.insert(2,str);
注:会在下标2的后方开始插入,插入后连接之前的内容;str代表其他字符串
3、2B与String之间的转化(以Buffer举例):
(1)String 转为 Buffer 需要使用构造方法。
public class text{
//String转成Buffer需要调用构造方法
public static StringBuffer func1(String str){
return new StringBuffer(str);
}
public static void main(String[] args) {
//String转成Buffer需要调用构造方法
String str = "你是人间四月天";
StringBuffer sb = func1(str);
System.out.println(sb);
}
}
(2)Buffer 转成 String 需要使用toString 方法。
public class text{
//Buffer转成String需要调用toString方法
public static String func2(StringBuffer sb){
return sb.toString();
}
public static void main(String[] args) {
//Buffer转成String需要调用toString方法
StringBuffer sb = new StringBuffer();
sb.append("我是人间四月天");
String str = func2(sb);
System.out.println(str);
}
}
2B的主要区别:
Buffer 比 Builder 多一个修饰词“ Synchronized ”,采用线性同步处理,以保证线性安全。
所以,单线程一般使用 Builder,多线程一般使用Buffer。
String 与 2B 的主要区别:
| 类型 | 源码value值区别 | 存放位置区别 | 字符串更改区别 |
| String | value 为 final 类型 | 不一定存放在常量池 但字面值一定在常量池 | 更改字符串时新建对象 |
| 2B | value 为非 final 类型 | 一定在堆中 | 更改字符串时不重建对象 |
| 小结 | String 内容不可修改 2B 可修改 | 2B 一定在堆中是因为 调用了 append() 方法 | 2B相对更加节省内存 |
本文介绍了StringBuilder在字符串拼接中的优势,包括其append方法避免对象创建、在内部循环中的应用,以及与String和StringBuffer的区别,重点讲解了线程安全问题和内存效率。此外,还涵盖了StringBuffer的反转、删除和插入操作,以及两者之间的转换方式。

被折叠的 条评论
为什么被折叠?



