StringBuild类

 

前面学过,字符串是常量(因为字符串的底层是一个被final修饰的byte数组private final byte[] value),他们的值在创建之后不能更改,进行字符串相加时,内存中就会有多个字符串,占用空间多,效率低下,举例:

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

这"a""b""c"三个字符串分别占用三块内存空间,然后"a"+"b"结果生成一个新的字符串,占用一块空间,最后 "a" + "b" + "c "又是一个字符串,一共五个字符串,占用内存,效率低下。

字符串缓冲区支持可变的字符串

这个字符串缓冲区,就是String Build类,可以提高字符串的操作效率(看成是一个长度可以变化的字符串),底层是一个数组,但是没有被final修饰,可以改变长度。

byte[] value = new byte[16],初始长度16。

回忆知识点:ArrayList无参构造初始化的空集合初始容量为10。

此时举例:String s = "a" + "b" + "c ";

首先初始化一个长度为16的空数组,先把"a"放在索引为0的位置,再把"'b"放在索引为1的位置,接着把"c"放在索引为2的位置。

StringBuild在内存中始终是一个数组,占用空间少,效率高,如果超出了StringBuild的容量,会自动地扩容

StringBuild构造方法:

StringBuild():构造一个不带任何字符的字符串生成器,其初始容量为16个字符。

StringBuild(String str):构造一个字符串生成器,并初始化为指定的字符串内容。

// 构造一个不带任何字符的字符串生成器,其初始容量为16个字符。
StringBuilder stringBuilder = new StringBuilder();
System.out.println(stringBuilder);  // 空,非地址值,重写toString()

//构造一个字符串生成器,并初始化为指定的字符串内容。
StringBuilder stringBuilder1 = new StringBuilder("abc");
System.out.println(stringBuilder1);//abc

常用的成员方法:

public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身(地址值)。即返回的是this,调用的方法对象。

private static void demo01(){
    StringBuilder stringBuilder = new StringBuilder();
    // 一次传一个,返回当前对象自身(地址)
    StringBuilder stringBuilder1 = stringBuilder.append(1);
    // 对于引用类型,==比较的是地址值
    //回忆知识点:如果要比较内容,使用equals()方法
    System.out.println(stringBuilder == stringBuilder1); // true

    // 使用append方法可以不接收返回值
    stringBuilder.append(3);
    stringBuilder.append("2"); // 可以添加进字符串
    stringBuilder.append('c');
    System.out.println(stringBuilder);

    /*
    链式编程:方法返回值是一个对象,可以继续调用方法
     */
    // 比如:
    System.out.println("abc".toUpperCase().toLowerCase().toUpperCase());
    stringBuilder.append("abc").append("1").append('c');
    System.out.println(stringBuilder);
}

public String toString():将当前StringBuilder对象转换为String对象。

对应StringBuilder的有参构造方法反向转换。

private static void demo02(){
    //String-->StringBuilder
    StringBuilder stringBuilder = new StringBuilder("abc");
    stringBuilder.append(3).append(2).append('d');
    System.out.println("StringBuilder:" + stringBuilder); // StringBuilder:abc32d
    //StringBuilder-->String
    String str = stringBuilder.toString();
    System.out.println("String:" + str); // String:abc32d
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值