StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的。
作用:提高字符串的操作效率。
StringBuilder类和String类的区别
- String类:内容是不可变的
- StringBuilder类:内容是可变的
StringBuilder的构造方法
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
//案例:
public class StringBuilderDemo01 {
public static void main(String[] args) {
//public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length():" + sb.length());
//public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
StringBuilder sb2 = new StringBuilder("hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2.length():" + sb2.length());
}
}
StringBuilder提高效率原理
String的内存原理:
字节码文件(.class)先加载进方法区,main方法被JVM自动执行进入栈内存,开始执行第一行代码
String s1 =“a”;会先检查字符串常量池里有没有字符串“a”,没有的话就创建。s1进入“a”的常量池地址,
String s2 = s1 + “b”;检查常量池有没有,没有就创建。这里出现了字符串的“+”拼接,系统底层会自动的在堆内存中创建StringBuilder对象,自动调用该对象的append()方法完成拼接。拼接后,系统自动将StringBuilder的“ab”字符调用toString()方法转换成String类型,然后s2字符串接收。(每检测到一个“+”就会创建一个StringBuilder来接收,太占用内存)。

StringBuilde内存原理
在堆内存中只创建一个StringBuilder来出来字符串,检测到一个就拼接在一起,在拼接的过程中不会产生额外的对象垃圾,不需要垃圾回收,所以效率高
总结:String是不可变的,拼接是底层会产生一个StringBuilder对象,再转换为String。此时的StringBuilder是要被垃圾回收的,如果有大量的拼接操作,意味着会产生大量的StringBuilder垃圾,此时垃圾回收器线程就会执行。当垃圾回收线程执行的时候,其他线程就会停止运行。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。