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垃圾,此时垃圾回收器线程就会执行。当垃圾回收线程执行的时候,其他线程就会停止运行。

发表回复

您的电子邮箱地址不会被公开。