StringBuilder类

StringBuilder类

4.1 字符串拼接问题

String类

​ 字符串是常量,他们的值再创建后不能更改。

​ 字符串底层是一个被final修饰的数组,不可改变,是一个常量

​ private final byte[] value;

​ 进行字符串的相加,内存中就会有很多个字符串,占用空间多,效率低下:

比如

String s = "a"+"b"+"c" = "abc";

"a","b","c"  3个字符串
"a"+"b" "ab" 1个字符串
"ab"+"c" "abc" 1个字符串

4.2 StringBuilder类

字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)

底层也是一个数组,但是没有被final修饰,可以改变长度

byte[] value = new byte[16];

StringBuilder在内存中始终是一个数组,占用空间少,效率高

如果超出了StringBuilder的容量,会自动扩容

4.3 构造方法

根据StringBuilder的API文档,常用的两个构造方法:

  • public StringBuilder():构造一个空的StringBuilder容器
  • public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去
public static void main(String[] args){
    // 空参
    StringBuilder bu1 = new StringBuilder();
    System.out.println(bu1);// (空白)
    // 带字符串的构造方法
     StringBuilder bu2 = new StringBuilder("abc");
    System.out.println(bu2);// (abc)
}

4.4 常用成员方法

StringBuilder常用的方法有两个:

  • public stringBuilder append(。。):添加任意数据类型的字符串形式,病返回自身

    public static void main(String[] args){
        // 创建StringBuilder对象
        StringBuilder bu1 = new StringBuilder();
        // 使用append方法添加数组
        StringBuilder bu2 = bu1.append("abc");// 把bu1的地址值赋值给了bu2
        Systom.out.println(bu1);// abc
        Systom.out.println(bu2);// abc
        Systom.out.println(bu1 == bu2); // ture
        // 使用appen方法无需接收返回值
        bu1.appen("a");
        bu1.appen("b");
        bu1.appen("c");
        Systom.out.println(bu1);// abc
        
        // 链式编程:方法返回值是一个对象,可以继续调用方法
        bu1.appen("a").appen("b").appen("c");
        Systom.out.println(bu1);// abc
    }
    
  • StringBuilder和string可以相互转换

    • stringbuillder-->String:public String toString():将当前的StringBuilder对象转换为String对象
    • string-->StringBuillder:可以使用StringBuilder的构造方法StringBuilder(String str)构造一个字符串生成器,并初始化指定字符串的内容
string-->StringBuillder
public static void main(String[] args){
    // string-->StringBuillder

    String str = "hello";
    System.out.println("str"+str);// str
    StringBuilder bu = new StringBuilder(str);
    // 往StringBuilder里添加数据
    bu.append("wold");
     System.out.println("bu"+bu);// helloworld
     
     // stringbuillder-->String
     String s = bu.toString();
     System.out.println("s"+s);// helloworld
}
  • reverse方法

    public static void main(String[] args){
        StringBuilder str = new StringBuilder();
        str.append("j").append("a").append("va");
        str.reverse();
        System.out.println(str);// avaj
    }
    
原文地址:https://www.cnblogs.com/anke-z/p/12495411.html